准备工作:
添加k8s源
在/etc/yum.repos.d/目录中新建k8s.repo文件,其中输入:
[kubernetes]
name =Kubernetes
baseurl =https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 /
enabled =1
gpgcheck =0
保存文件后输入
yum clean all
yum makecache
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
关闭swap
把/etc/fstab文件中带有swap的行删除,没有则无视
安装k8s:
安装docker、kubelet、kubeadm、kubectrl
安装docker
安装kubelet、kubeadm、kubectrl 以1.10.8为例:
yum install kubelet-1 .10 .8 kubeadm-1 .10 .8 kubectl-1 .10 .8 -0
设置开机启动kubelet(有些版本需要提前启动kubelet,systemctl start kubelet;有些版本不需要,会在kubeadm安装时启动)
启动docker(如果已启动则无视)
systemctl enable docker && systemctl start docker
通过kubeadm安装
kubeadm init --kubernetes-version=1.10 .8 --pod-network-cidr 192.100 .0 .0 /16
kubeadm在安装时会去官网查询各组件对应的版本号,所以在被墙的情况下需要制定版本号,在安装过程中会下载一些镜像,需要提前设置docker代理
pod-network-cidr 192.100.0.0/16 指定pod的网址区段,需要和后面网络组件(比如calico)中设置保持一致。安装成功后会看到以下信息:
To start using your cluster, you need to run (as a regular user):
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u)😒(id -g) $HOME/.kube/config
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
http://kubernetes.io/docs/admin/addons/
You can now join any number of machines by running the following on each node as root:
kubeadm join --token 242b80.86d585ebd6358b08 192.168.18.4:6443 (192.168.18.4:6443为master地址)
按以上提示继续操作,默认设置pod不能调度到master节点上,如果想要调度到master(比如单节点集群)上,需要输入以下命令:
kubectl taint nodes --all node-role.kubernetes.io/master-
此时通过kubectl get nodes命令可以看到节点处于NotReady状态,还需要安装网络组件,这里以calico为例。
安装calico组件
wget https://docs.projectcalico.org/v3.2/getting-started/kubernetes/installation/hosted/etcd.yaml
kubectl create -f etcd.yaml
wget https://docs.projectcalico.org/v3.2/getting-started/kubernetes/installation/rbac.yaml
kubectl create -f rbac.yaml
wget https://docs.projectcalico.org/v3.2/getting-started/kubernetes/installation/hosted/calico.yaml
打开calico.yaml,修改CALICO_IPV4POOL_CIDR对应的value,与kubeadm init中设置的pod-network-cidr保持一致
等待所有pod状态变为running,即表示安装成功。如果有error,可用kubectl describe pod xxx查看状态异常的pod,查看event部分的错误原因。(比较常见的就是image获取失败)
添加node到集群中
遇到的问题
k8s各组件kubelet、kubeadm的版本要保持一致,比如kubeadm 1.11,kubelet 1.12就会安装失败
kubeadm安装时报以下错误:
[preflight] Some fatal errors occurred: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1
解决方案
echo 1 > /proc/sys/net /bridge/bridge-nf-call -iptables && echo 1 > /proc/sys/net /bridge/bridge-nf-call -ip6tables
在kubeadm init安装失败时,要先进行kubeadm reset清除环境再重新进行kubeadm init安装
kubelet的日志在/var/log/message中,遇到问题可查看日志。
kubeadm安装失败,查看/var/log/message,发现kubelet启动失败,报错failed to create kubelet: misconfiguration: kubelet cgroup driver: "systemd" is different from docker cgroup driver: "cgroupfs",这是因为kubelet的文件驱动和docker不一致造成的,修改kubelet配置文件:
vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
修改文件中的--cgroup-driver=cgroupfs(保持和docker一致)
systemctl stop kubelet
kubeadm reset
kubeadm init --kubernetes-version=1.10 .8 --pod-network-cidr 192.100 .0 .0 /16
kubelet本身服务的日志默认放在/var/log/messages中,有时需要修改日志位置,可通过修改kubelet启动命令行参数来实现。
vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
添加日志相关的命令行参数
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBELET_AUTHZ_ARGS $KUBELET_CADVISOR_ARGS $KUBELET_CGROUP_ARGS $KUBELET_CERTIFICATE_ARGS $KUBELET_EXTRA_ARGS --log-dir=/data/k8s/logs/kubelet --logtostderr=false --v=4
--log-dir为日志目录位置,--logtostderr表示是否将错误信息输出到stderr,默认true,改为false表明输出到文件,--v表示日志级别
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)