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
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐