一、安装kubeadm、kubelet和kubectl(所有节点)
# cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpghttps://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
# yum -y install kubelet kubeadm kubectl
# systemctl enable kubelet
注:切记不要启动服务
二、部署kubernetes Master
192.168.6.6<master>执行
# kubeadm init \
--kubernetes-version=v1.27.4 \
--apiserver-advertise-address=192.168.6.6 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--cri-socket unix:///var/run/containerd/containerd.sock \
--ignore-preflight-errors=all
建议service-cidr改成--service-cidr=10.96.0.0/16
结果:
注解:
--apiserver-advertise-address=集群通告地址
--image-repository由于默认拉去镜像地址空间k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
--kubernetes-version
k8s版本,与安装的一直
--service-cidr集群内部虚拟网络,Pod统一访问入口
--pod-network-cidr
pod网络,与下面部署的CNI网络组件yaml中保持一致
拷贝kubectl使用的连接k8s认证文件到默认路径:
# mkdir -p $HOME/.kube
# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# sudo chown $(id -u):$(id -g) $HOME/.kube/config
三、kubeadm init做了那些事
1. [preflight] 环境检查和拉取镜像
2.[certs] 生成证书文件,存放目录:/etc/kubernetes/pki
3.[kubeconfig] 生成kubeconfig连接k8s配置文件,存放目录:controller-manager.conf
4.[kubelet-start] 生成kubelet配置文件并启动
5.[control-plane] 已静态pod方式启动master组建
6.存放master组件配置文件/etc/kubernetes/manifests,存储配置到k8s configmap中
7.[mark-control-plane] 给master节点配置role和添加污点(没有声明的情况下,不允许pod分配过来)
8.[bootstrap-token] 为kubelet自动生成证书的一系列配置
9.[addons] 安装插件,coreDNS和kube-proxy
10.让你拷贝kubectl所使用的连接k8s的配置文件到默认路径
mkdir -p$HOME/.kube
sudo cp -i/etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id-u):$(id -g) $HOME/.kube/config
生成一个node加入集群的命令:
kubeadm join 192.168.6.6:6443 --token rzh3hx.6vc9ba1551peie1t \
--discovery-token-ca-cert-hash sha256:dca4809ae1302207bee4517a0a97577f37ea90bc98a9466589e87b644c43c96d
四、加入kubernetes node<node上执行>
# kubeadm join 192.168.6.6:6443 --token rzh3hx.6vc9ba1551peie1t \
--discovery-token-ca-cert-hash sha256:dca4809ae1302207bee4517a0a97577f37ea90bc98a9466589e87b644c43c96d \
--cri-socket unix:///var/run/containerd/containerd.sock
# kubectl get nodes<master上执行>
注:
NotReady: 因为网络没有准备就绪,可以通过journalctl –u kubelet> a.log文件中查看
默认token有效期为24小时,当过期之后,改token就不可用了。这时就需要重新创建token,可以之间使用命令快捷生成:
# kubeadm token create--print-join-command
五、部署容器网络(CNI)
官方文档:
注意:只要部署下面其中一个,推荐calico
Calico是一个纯三层的数据中心网络方案,caclico支持广泛的平台,包括k8s,openstack等。
Calico在每一个计算节点利用linux kernel实现了一个高效的虚拟路由器(vRouter)来负责数据转发,而每个vRouter通过BGP协议负责把自己上运行的workload的路由信息向整个calico网络传播。
此外,Calico项目还实现了k8s网络策略,提供ACL功能
下载文件<我是通过web下载到windows再拷贝到系统的>:
curl https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml -O
下载完成后还需要修改里面定义Pod网络(CALICO_IPV4POOL_CIDR),与前面的kubeadm init指定的pod-network-cidr一样。
# kubectl apply -f calico.yaml
安装完成后STATUS的NotReady状态转换成了Ready状态。