一,使用kubeadm初始化k8s集群
第1步:
【如果容器为dokcer】执行下面命令:
上传通过 docker save -o 打包好的镜像文件 k8simage-1-20-6.tar.gz,然后在所有机器节点导入:
docker load -i k8simage-1-20-6.tar.gz
【如果容器为containerd】执行下面命令:
上传通过 ctr -n=k8s.io images export 打包好的镜像文件 k8s_1.26.0.tar.gz,然后在所有机器节点导入:
ctr -n=k8s.io images import k8s_1.26.0.tar.gz
# 可用查看导入到默认的containerd的命名空间内的镜像列表
ctr -n=k8s.io images ls
若是k8s相关的镜像,都默认在k8s.io这个命名空间,所以导入镜像时需要指定命令空间为k8s.io
第2步:
仅在master主节点,生成初始化的yaml文件,并且修改配置。
kubeadm config print init-defaults > kubeadm.yaml
更改内容如下:
registry.aliyuncs.com/google_containers
podSubnet: 10.244.0.0/16
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd
注意:如果容器采用的是containerd服务,此处配置第2处,应该改为正确的目录,查找命令:
find / -name 'containerd.sock'
将查询结果路径,替换第2处的位置即可!
第3步:
初始化kubeadm,并且添加一个参数:--ignore-preflight-errors=SystemVerification
kubeadm init --config=kubeadm.yaml --ignore-preflight-errors=SystemVerification
执行提示的命令:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
【特别提醒】:
此时会生成文件config,在/root/.kube/config
,将它拷贝到其他node机器节点对应的路径下,就可以执行使用kubectl命令了
# 也可以通过此命令查看config内容:
kubectl config view
二,将节点机器,加入集群
在master控制节点上,查看加入节点的命令:
kubeadm token create --print-join-command
显示如下:
kubeadm join 192.168.40.190:6443 --token vulvta.9ns7da3saibv4pg1 --discovery-token-ca-cert-hash sha256:72a0896e27521244850b8f1c3b600087292c2d10f2565adb56381f1f4ba7057a
在node节点上,把node1加入k8s集群:
kubeadm join 192.168.40.180:6443 --token vulvta.9ns7da3saibv4pg1 --discovery-token-ca-cert-hash sha256:72a0896e27521244850b8f1c3b600087292c2d10f2565adb56381f1f4ba7057a --ignore-preflight-errors=SystemVerification
【注意】:一定加入该参数,--ignore-preflight-errors=SystemVerification
如果忘记加,已经生成了证书,再次执行提示证书已经存在 “already exists”,此时需要重置后,再执行:
# 重置
kubeadm reset
【扩展】:为node节点打标签
kubectl labe node meinode[节点名] node-role.kubernetes.io/worker=worker[标签名称]
三,安装网络插件calico
此时,集群状态还是NotReady状态,因为没有安装网络插件,下面安装网络插件calico。安装版本要统一,尽量不要安装最新版本!
下载地址:
https://docs.projectcalico.org/manifests/calico.yaml
该文件特殊说明:
安装插件calico
kubectl apply -f calico.yaml
四,测试在k8s创建pod是否可以正常访问网络
1,在node节点导入 busybox-1-28.tar.gz 镜像,并且加载
docker load -i busybox-1-28.tar.gz
2,在master节点创建容器,并测试网络
kubectl run busybox --image busybox:1.28 --image-pull-policy=IfNotPresent --restart=Never --rm -it busybox --sh
进入容器内后:
ping www.baidu.com
# 显示如下内容
PING www.baidu.com (39.156.66.18): 56 data bytes
64 bytes from 39.156.66.18: seq=0 ttl=127 time=39.3 ms
nslookup kubernetes.default.svc.cluster.local
# 显示如下内容
Server: 10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
Name: kubernetes.default.svc.cluster.local
Address 1: 10.96.0.1 kubernetes.default.svc.cluster.local
K8S证书过期解决方案
查看证书有效时间:
openssl x509 -in /etc/kubernetes/pki/ca.crt -noout -text |grep Not
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep Not
延长证书过期时间
1.把update-kubeadm-cert.sh文件上传到master节点
2.在master节点上执行如下:
# 添加可执行权限
chmod +x update-kubeadm-cert.sh
# 执行命令,把时间延长到10年
./update-kubeadm-cert.sh all
# 在master节点查询Pod是否正常,能查询出数据说明证书签发完成
kubectl get pods -n kube-system
# 执行第一步命令,再次查看证书有效期,可以看到会延长到10年