基于Ubuntu安装部署Kubernetes集群
环境准备
安装 Ubuntu 虚拟机
通过 Parallels Desktop 安装了 3 台虚拟机,并对虚拟机进行如下规划:Hostname IP OS Specs k8s-master-01 192.168.11.190 Ubuntu 20.04 2GB Ram, 2vcpus k8s-node-01 192.168.11.191 Ubuntu 20.04 2GB Ram, 2vcpus k8s-node-02 192.168.11.192 Ubuntu 20.04 2GB Ram, 2vcpus 科学上网
关闭swap
编辑
/etc/fstab
文件,注释掉引用 swap
1 | sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab |
安装和配置 Docker
在每台虚拟机上安装 Docker, 参考Install Docker Engine on Ubuntu:
1 | # 更正 apt 包索引和安装GPG证书 |
安装和配置 Kubernetes
在每台虚拟机上安装 kubeadm、kubelet 和 kubectl, 参考 Installing kubeadm:
1 | # 更新 apt 包索引并安装使用 Kubernetes apt 仓库所需要的包: |
如果 packages.cloud.google.com 无法访问的话,可以更换换国内的源:
1 | sudo curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add - |
配置节点
初始化 Master 节点
1 | sudo kubeadm reset |
- –-pod-network-cidr: 指定pod网络的IP地址范围,它的值取决于你在下一步选择的哪个网络网络插件,这里使用 Calico, 参考 Quickstart for Calico on Kubernetes。
- –dry-run 当使用kubeadm命令初始化集群时,会去官方镜像仓库(k8s.gcr.io)拉取镜像。但是国内网络无法访问官方镜像仓库,导致集群初始化失败,可以使用其他镜像仓库。
kubeadm init 输出的token用于master和加入节点间的身份认证,token是机密的,需要保证它的安全,因为拥有此标记的人都可以随意向集群中添加节点。
配置 kubectl:
1 | mkdir -p $HOME/.kube |
安装 Calico 网络插件
1 | kubectl create -f https://projectcalico.docs.tigera.io/manifests/tigera-operator.yaml |
修改Docker及kubelet的Cgroup Driver
在安装kubernetes的过程中,经常会遇见如下错误
failed to create kubelet: misconfiguration: kubelet cgroup driver: “cgroupfs” is different from docker cgroup driver: “systemd”
原因是 docker 的 Cgroup Driver 和 kubelet 的 Cgroup Driver 不一致。
有两种方式解决问题,一种是修改docker,,另一种是修改kubelet;
- 修改 Docker 的 Cgroup Driver
修改/etc/docker/daemon.json文件
1 | { |
重启docker
1 | systemctl daemon-reload |
- 修改 kubelet 的 Cgroup Driver
修改/etc/systemd/system/kubelet.service.d/10-kubeadm.conf文件,增加–cgroup-driver=cgroupfs
1 | Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --cgroup-driver=cgroupfs" |
重启kubelet
1 | systemctl daemon-reload |
卸载集群
在主节点上运行:
1 | kubectl drain <node name> --delete-local-data --force --ignore-daemonsets |
然后在需要移除的节点上,重置kubeadm的安装状态:
1 | kubeadm reset |