环境
大于等于两台2C4G
的CentOS7.8
Linux 服务器
PS:如果本地资源不够,可以去阿里云开几台ECS,选按量付费。2c4g,5M带宽最低配大概每小时不到1块钱。
部署前准备
关闭 firewalld 和 selinux
bash
1 | setenforce 0 |
安装 ipvs 内核
todo ipvs 和 iptables 区别
bash
1 | yum -y install ipvsadm ipset sysstat conntrack libseccomp |
设置开机默认加载配置文件
bash
1 | cat >>/etc/modules-load.d/ipvs.conf<<EOF |
设置开机加载 ipvs
bash
1 | systemctl enable systemd-modules-load.service # 设置开机加载内核模块 |
设置 Docker 源
bash
1 | curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo |
设置 k8s 源
bash
1 | cat >>/etc/yum.repos.d/kuberetes.repo<<EOF |
安装 docker-ce、kubelet、kubeadm、kubectl
bash
1 | yum install docker-ce kubelet kubectl kubeadm -y |
启动设置
bash
1 | systemctl start docker |
设置内核参数及 K8S 参数
bash
1 | cat >>/etc/sysctl.conf<<EOF |
设置 kubelet 忽略 swap 使用 ipvs
bash
1 | cat >/etc/sysconfig/kubelet<<EOF |
部署
部署 Master 节点
此步骤仅需在 Master 节点执行!!!
提前拉取镜像
因为一些众所周知的原因,国内是访问不到 k8s 的官方镜像的。所以需要从国内的镜像源拉取然后通过tag方式命名成官方镜像(ps:当然如果服务器在国外是没有这个问题的)
查看当前版本 kubeadm 所需的镜像
此处要根据自己实际依赖的镜像版本进行操作
bash
1 | > kubeadm config images list |
从阿里镜像源拉取对应镜像
bash
1 |
|
修改tag
bash
1 | docker tag registry.aliyuncs.com/google_containers/kube-apiserver:v1.20.5 k8s.gcr.io/kube-apiserver:v1.20.5 |
删除从阿里云拉取的镜像
bash
1 | docker rmi `docker images | grep aliyun | awk '{print $1":"$2}'` |
初始化 Master 节点
如果中途有中断可以使用
kubeadm reset
来恢复。如果初始化过程中有报错可以使用journalctl -xeu kubelet
查看原因
bash
1 | kubeadm init --kubernetes-version=v1.20.5 --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=Swap |
初始化成功后可以看到类型输出
bash
1 | Your Kubernetes control-plane has initialized successfully! |
查看集群状态
bash
1 | kubectl get ComponentStatus |
这时我遇到了controller-manager
和scheduler
状态为unhealthy
的情况。参考https://my.oschina.net/u/4408611/blog/4660483
解决之。
部署flannel网络插件
bash
1 | kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml |
从 master 节点取加入集群命令
bash
1 | kubeadm token create --print-join-command |
初始化 Node 节点
拉取镜像
参考上文 初始化Master节点 相关内容
加入集群
执行从 master 节点获取的加入集群命令
bash
1 | kubeadm join 172.16.168.68:6443 --token 29eeus.0g2ao4aieqywfjf7 --discovery-token-ca-cert-hash sha256:1464eadfbc8ece7378935096710b1d437134e6b626961c428f263ce1539ab332 |
成功后会有如下输出
bash
1 | This node has joined the cluster: |
在 Master 节点查看集群信息
bash
1 | kubectl get nodes # 查看集群节点状态 |