安装kubeadm, kubelet 和 kubectl
部署之前,我们需要安装一下三个包:
- kubeadm: 引导启动k8s集群的命令行工具。
- kubelet: 在群集中所有节点上运行的核心组件, 用来执行如启动pods和containers等操作。
- kubectl: 操作集群的命令行工具。
首先添加apt-key:
sudo apt update && sudo apt install -y apt-transport-https curl
curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
1.下载 Google Cloud 公开签名秘钥:
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg (可手动下载)
2.添加 Kubernetes apt
仓库:
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
3.更新 apt
包索引,安装 kubelet、kubeadm 和 kubectl,并锁定其版本:
sudo apt-get update
sudo apt-get install -y kubelet=1.23.12-00 kubeadm=1.23.12-00 kubectl=1.23.12-00
sudo apt-mark hold kubelet kubeadm kubectl
安装老版本的 Kubernetes
apt-cache madison kubectl | grep ${version}
关闭Swap
$ sudo swapoff -a
# use "free -m" to see if we successfully unable the swap
$ free -m
4.创建Master节点
kubeadm init --config kubeadm-config.yaml
# kubeadm-config.yaml
kind: ClusterConfiguration
apiVersion: kubeadm.k8s.io/v1beta3
kubernetesVersion: v1.23.12
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
networking:
podSubnet: 10.244.0.0/16
serviceSubnet: 172.16.0.0/16
---
kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
cgroupDriver: cgroupfs
---
apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: "192.168.0.192"
根据上面的步骤:
1) 在主机节点(A)当前用户home下创建.kube, 拷贝admin配置文件,赋予权限
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
2) 在主节点(A)安装网络插件,这是必要的,因为pod之间需要通信, 这里使用的是flannel
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 其他 Networking 和 network policy 可以参考以下链接
https://kubernetes.io/docs/concepts/cluster-administration/addons/
5.添加Worker节点
要为群集添加工作节点,需要为每台计算机执行以下操作:
- SSH到机器
- 成为root用户,(如: sudo su -)
- 运行上面的
kubeadm init
命令输出的:kubeadm join --token <token> <master-ip>:<master-port> --discovery-token-ca-cert-hash sha256:<hash>
如果我们忘记了Master节点的加入token,可以使用如下命令来查看:
kubeadm token list
# 输出:
# TOKEN TTL EXPIRES USAGES DESCRIPTION EXTRA GROUPS
# abcdef.0123456789abcdef 22h 2018-11-10T14:24:51Z authentication,signing <none> system:bootstrappers:kubeadm:default-node-token
记录 kubeadm init
输出的 kubeadm join
命令。 你需要此命令将节点加入集群。
kubeadm join 192.168.0.192:6443 --token yca760.ascp39dkvddytq3h \
--discovery-token-ca-cert-hash sha256:ecfd86831e088af80789823035d4999fc45c050610a4b787ba84e50750493ed9
也可以使用下面的名为 kubeadm-config.yaml
的 kubeadm 配置文件 示例用于向集群中添加另一个控制面节点。
apiVersion: kubeadm.k8s.io/v1beta3
kind: JoinConfiguration
controlPlane:
localAPIEndpoint:
advertiseAddress: "192.168.0.193"
bindPort: 6443
discovery:
bootstrapToken:
apiServerEndpoint: 192.168.0.192:6443
token: "yca760.ascp39dkvddytq3h"
caCertHashes:
- "sha256:ecfd86831e088af80789823035d4999fc45c050610a4b787ba84e50750493ed9"
# 请更改上面的认证信息,使之与你的集群中实际使用的令牌和 CA 证书匹配
nodeRegistration:
kubeletExtraArgs:
node-ip: 10.100.0.4,fd00:1:2:3::4
默认情况下,token的有效期是24小时,如果我们的token已经过期的话,可以使用以下命令重新生成:
kubeadm token create
# 输出:
# 9w6mbu.3k2z7pprl3eaozk9
如果我们也没有--discovery-token-ca-cert-hash
的值,可以使用以下命令生成:
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
# 输出:
# 9fcb02a0f4ab216866f87986106437b7305474850f0de81b9ac9c36a468f7c67
6.卸载 k8s
#卸载集群
kubeadm reset
rm -rf $HOME/.kube
---------------
sudo apt-get purge kubeadm kubectl kubelet kubernetes-cni
sudo apt-get autoremove
sudo rm -rf ~/.kube