1、使用kubeadm方式搭建K8S集群
集群规划
192.168.0.11 k8s-master
192.168.0.12 k8s-slave1
192.168.0.13 k8s-slave2
修改三台节点的hostname和hosts文件
[root@k8s-master ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.11 k8s-master
192.168.0.12 k8s-slave1
192.168.0.13 k8s-slave2
[root@k8s-master ~]# cat /etc/hostname
k8s-master
2、三台节点的docker安装
可以参照
https://blog.csdn.net/weixin_44870066/article/details/135170862?spm=1001.2014.3001.5501
CentOS中docker安装及镜像源配置
3、三台节点关闭防火墙、关闭selinux、关闭swap、
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 关闭selinux
# 永久关闭
sed -i 's/enforcing/disabled/' /etc/selinux/config
# 临时关闭
setenforce 0
# 关闭swap
# 临时
swapoff -a
# 永久关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab
4、将ipv4流量传递到# 将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
生效
sysctl --system
与windows主机保持时间同步
yum install ntpdate -y
ntpdate time.windows.com
注意:在生产环境中,机房会配置专门的时间同步服务器,ntp服务就需要和集群中的授时服务器保持时间同步
5、添加kubernetes软件源
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.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
6、安装kubeadm,kubelet和kubectl
由于版本更新频繁,这里指定版本号部署:注意版本号
建议执行以下命令
yum install -y kubelet-1.27.0 kubeadm-1.27.0 kubectl-1.27.0
设置开机启动
systemctl enable kubelet
7、部署kubernetes Master
在k8s-master节点执行
kubeadm init --apiserver-advertise-address=192.168.0.11 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.27.0 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16
kubeadm init \
--apiserver-advertise-address=192.168.0.11 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.27.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=all
由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址,【执行上述命令会比较慢,因为后台其实已经在拉取镜像了】,我们 docker images 命令即可查看已经拉取的镜像
当我们出现下面的情况时,表示kubernetes的镜像已经安装成功
使用kubectl工具 【master节点操作】
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
执行完成后,我们使用下面命令,查看我们正在运行的节点
kubectl get nodes
status 为NotReady,表示master节点已经运行了,但是还是处于未准备状态,需要在slave节点执行其他命令,将 slave1和slave2节点加入到maste节点
8、master节点创建token,默认的token有效期是24小时,也可以创建永久有效的token
kubeadm token create --print-join-command
该命令的执行结果的返回内容格式如下
kubeadm join 192.168.0.11:6443 --token 8j6ui9.gyr4i156u30y80xf \
--discovery-token-ca-cert-hash sha256:eda1380256a62d8733f4bddf926f148e57cf9d1a3a58fb45dd6e80768af5a500
将该命令输出的结果,分别在两个slave节点执行
在maste节点查看所有节点的状态
kubectl get node
[root@k8s-master ~]# kubectl get nodes
NAME STATUS ROLES AGE
k8s-master NotReady master 29d
k8s-slave1 NotReady <none> 28d
k8s-slave2 NotReady <none> 28d
9、部署网络插件
上面的状态还是NotReady,下面我们需要网络插件,来进行联网访问
在所有的节点上都执行,master和所有的salve节点
新建文件夹用于存放k8s的yml文件,如
/opt/module/k8s-script
在三台节点的此文件夹下执行如下命令
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
注意:获取到的kube-flannel.yml文件要做修改才能使用,quay.io为国外镜像源地址,需要进行替换才方便使用,否则极有可能拉去镜像不成功。
将k8s.gcr.io替换为
registry.cn-hangzhou.aliyuncs.com/google_containers
或者
registry.aliyuncs.com/google_containers
将 quay.io 替换为
quay.mirrors.ustc.edu.cn
gcr.io 地址替换
将 gcr.io 替换为 registry.aliyuncs.com
三台节点均要完成替换。
10、在master节点的kube-flannel.yml文件目录下执行
kubectl apply -f kube-flannel.yml
查看集群中pod状态
kubectl get pods -n kube-system
查看集群节点状态
kubectl get nodes
[root@k8s-master ~]# kubectl get nodes
NAME STATUS ROLES AGE
k8s-master Ready master 29d
k8s-slave1 Ready <none> 28d
k8s-slave2 Ready <none> 28d