实验机器配置
主机名 | IP地址 | 操作系统版本 | 角色 |
---|---|---|---|
sun003 | 192.168.159.164 | centos7.9 | master |
sun004 | 192.168.159.165 | centos7.9 | worker1 |
sun005 | 192.168.159.166 | centos7.9 | worker2 |
K8s:1.22.7
Docker:20.10.22
虚拟机至少2G,2核。
准备工作
- 在所有节点,修改主机名
hostnamectl set-hostname 主机名
hostnamectl status
- 在所有节点,修改
/etc/hosts
文件
- 在所有节点,关闭防火墙和selinux
systemctl disable firewalld.service
vi /etc/selinux/config
将SELINUX=enforcing改为SELINUX=disabled
firewall-cmd --get-default-zone
getenforce
- 在所有节点,关闭swap,注释掉swap那一行
vi /etc/fstab
- 在所有节点,配置yum源
vi /etc/yum.repos.d/k8s.repo
[kubernetes]
name=kubernetes aliyun repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=0
enabled=1
yum update
- 在所有节点,安装Docker,设置开机启动
yum -y install docker-ce
systemctl enable docker --now
- 新建docker配置文件
/etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
systemctl daemon-reload
systemctl restart docker
- 在所有节点,加载模块,设置内核参数
modprobe br_netfilter
cat << EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl -p /etc/sysctl.d/k8s.conf
- 在所有节点,配置ssh免密登录
ssh-keygen
ssh-copy-id 主机名
- 在所有节点,下载缺少的镜像,并导入
wget ftp://ftp.rhce.cc/cka-tool/coredns-1.21.tar
docker load -i coredns-1.21.tar
- 时间同步
yum install ntpdate -y
ntpdate time.windows.com
集群搭建
- 在所有节点,安装相关软件包
yum -y install kubeadm-1.22.7-0 kubelet-1.22.7-0 kubectl-1.22.7-0
- 在所有节点,启动kubelet,并设置开机启动
systemctl restart kubelet
systemctl enable kubelet
- 在所有节点,锁定版本
yum install yum-plugin-versionlock.noarch
yum versionlock kubeadm kubelet kubectl
- 在所有节点,添加kubectl命令补全
yum install bash-completion
source <(kubectl completion bash)
echo 'source <(kubectl completion bash)' >>~/.bashrc
- master节点,初始化
kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.22.7 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.245.0.0/16 --apiserver-advertise-address=192.168.159.164 --control-plane-endpoint=192.168.159.164 --ignore-preflight-errors=Swap
- 根据上面提示,执行命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
- 根据提示,将worker加入集群,token也可以使用如下命令获取
# 获取token
kubeadm token create --print-join-command
# worker加入集群
kubeadm join 192.168.159.164:6443 --token danjds.kbiw7xkzhaz88dyu --discovery-token-ca-cert-hash sha256:1fbbac20e830b7376177c0e24c6c8be28e982c514c525e7ade2b2ea72e824126
- 在master中查看,此时状态各节点STATUS仍然为NotReady,coreDNS状态不是Running,待安装网络插件后即会正常
kubectl get nodes
- 在master上,安装网络插件calico,修改
calico.yaml
里的pod网段,修改为init时--pod-netowrk-cidr
指定的网段
wget https://docs.projectcalico.org/manifests/calico.yaml
vi calico.yaml
kubectl apply -f calico.yaml
kubectl get nodes
概念补充
token:加入集群需要用到token和Master节点的ca证书sha256编码hash 值,默认 token 的有效期为 24 小时。当过期之后,该 token 就不可用了,可以执行如下命令重新生成:
kubeadm token create
kubeadm token list
也可以生成一个永不过期的 toke
kubeadm token create --ttl 0