本次使用kubeadm方式,部署1.23.17版本;

安装包百度云盘地址:

链接:https://pan.baidu.com/s/1PiIYXPyNkVuxBnuxBpvKHA?pwd=s04r 
提取码:s04r

一、虚拟机准备

        搭建学习环境,使用4台虚拟机centos7系统;

主机名称ip地址资源备注
harbor10.0.0.2301核2g镜像仓库
k8s23110.0.0.2312核4gmaster节点
k8s23210.0.0.2322核4gworker节点
k8s23310.0.0.2332核4gworker节点

二、各个节点环境准备

1,所有节点做hosts解析

cat >> /etc/hosts <<EOF
10.0.0.230 harbor harbor.xinjizhiwa.com
10.0.0.231 k8s231
10.0.0.232 k8s232
10.0.0.233 k8s233
EOF


2,harbor节点部署harbor镜像仓库

· 安装docker/docker-compose

#1,上传本地的docker及docker-compose的安装包;

[root@harbor ~]# rz -E  


[root@harbor ~]# ll
total 225164
-rw-------. 1 root root      1517 Dec  5 09:41 anaconda-ks.cfg
-rw-r--r--  1 root root 230555846 Dec  4 10:53 docker.tar.gz
-rw-r--r--. 1 root root      1010 Dec  5 09:53 linux.sh

#2,解压安装包
[root@harbor ~]# tar xf docker.tar.gz 
[root@harbor ~]# ll
total 225168
-rw-r--r--  1 root root 230555846 Dec  4 10:53 docker.tar.gz
drwxr-xr-x  2 root root       200 Jun 11  2023 download
-rwxr-xr-x  1 root root      3363 Dec  4 10:50 install-docker.sh

#3,查看安装版本
[root@harbor ~]# docker -v
Docker version 20.10.24, build 297e128

· 配置linux内核转发

        因为,docker底层使用了iptables,在容器与宿主机端口映射时,需要源地址转发,共享网络,所以,需要做内核转发配置;

[root@harbor ~]# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
[root@harbor ~]# sysctl -p
net.ipv4.ip_forward = 1

· 部署harbor仓库

安装包百度云盘地址:

#1,创建harbor工作目录

[root@harbor ~]# mkdir -pv /xinjizhiwa/harbor
[root@harbor ~]# cd /xinjizhiwa/harbor

#2,上传harbor本地安装包;
[root@harbor harbor]# rz -E

#3,解压harbor安装包
[root@harbor harbor]# tar xf harbor-offline-installer-v2.3.1.tgz 
[root@harbor harbor]# ll
total 614816
drwxr-xr-x 2 root root       122 Feb  2 21:19 harbor
-rw-r--r-- 1 root root 629571428 Nov  7 22:11 harbor-offline-installer-v2.3.1.tgz

#4,查看harbor的目录文件

[root@harbor harbor]# ll harbor
total 618124
-rw-r--r-- 1 root root      3361 Jul 19  2021 common.sh
-rw-r--r-- 1 root root 632922189 Jul 19  2021 harbor.v2.3.1.tar.gz
-rw-r--r-- 1 root root      7840 Jul 19  2021 harbor.yml.tmpl
-rwxr-xr-x 1 root root      2500 Jul 19  2021 install.sh
-rw-r--r-- 1 root root     11347 Jul 19  2021 LICENSE
-rwxr-xr-x 1 root root      1881 Jul 19  2021 prepare

#5,复制修改harbor的配置文件名称
[root@harbor harbor]# cp harbor/harbor.yml.tmpl  harbor/harbor.yml
 

#6,修改配置文件信息

[root@harbor harbor]# vim harbor/harbor.yml

...

hostname: harbor.xinjizhiwa.com

...

################################################

#注释掉下面的信息

# https related config
#https:
#  # https port for harbor, default is 443
#  port: 443
#  # The path of cert and key files for nginx
#  certificate: /your/certificate/path
#  private_key: /your/private/key/path

################################################

harbor_admin_password: 1

· 启动harbor脚本

[root@harbor harbor]# ./harbor/install.sh 

· 验证是否部署成功

[root@harbor harbor]# cd harbor

[root@harbor harbor]# docker-compose ps

本地windows浏览器访问;

注意:先做windows本地解析;

harbor.xinjizhiwa.com

至此,harbor仓库部署完毕

3,k8s集群节点部署docker

#k8s节点就是k8s231、k8s232、k8s233

#####################################

#1,将k8s集群三个节点,上传docker安装包;

[root@harbor ~]# scp docker.tar.gz 10.0.0.231:/root/

[root@harbor ~]# scp docker.tar.gz 10.0.0.232:/root/

[root@harbor ~]# scp docker.tar.gz 10.0.0.233:/root/

#2,解压、安装docker

[root@k8s231 ~]# ./install-docker.sh install

[root@k8s232 ~]# ./install-docker.sh install

[root@k8s233 ~]# ./install-docker.sh install

#3,三个节点,为docker做linux内核转发

[root@k8s231 ~]# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
[root@k8s231 ~]# sysctl -p
net.ipv4.ip_forward = 1

[root@k8s232 ~]# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
[root@k8s232 ~]# sysctl -p
net.ipv4.ip_forward = 1

[root@k8s233 ~]# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
[root@k8s233 ~]# sysctl -p
net.ipv4.ip_forward = 1

至此,k8s节点的docker环境部署完毕。

4,k8s三个节点配置docker

参数说明:
  "registry-mirrors": ["https://tuv7rqqq.mirror.aliyuncs.com"],

  "insecure-registries": ["http://harbor.xinjizhiwa.com"], #允许拉取自建仓库harbor仓库的镜像;

   "exec-opts": ["native.cgroupdriver=systemd"]   #kubeadm去寻找的cgroup默认是systemd,而docker不配置的话,默认是cgroupfs,不配置这个,部署k8s时会报错;

[root@k8s231 ~]# vim /etc/docker/daemon.json 

{
  "registry-mirrors": ["https://tuv7rqqq.mirror.aliyuncs.com"],
  "insecure-registries": ["http://harbor.xinjizhiwa.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}
 

[root@k8s232 ~]# vim /etc/docker/daemon.json 

{
  "registry-mirrors": ["https://tuv7rqqq.mirror.aliyuncs.com"],
  "insecure-registries": ["http://harbor.xinjizhiwa.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}
 

[root@k8s233 ~]# vim /etc/docker/daemon.json 

{
  "registry-mirrors": ["https://tuv7rqqq.mirror.aliyuncs.com"],
  "insecure-registries": ["http://harbor.xinjizhiwa.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}
 

#三个节点重启docker

[root@k8s231 ~]# systemctl restart docker.service

[root@k8s232 ~]# systemctl restart docker.service

[root@k8s233 ~]# systemctl restart docker.service

#各个节点登录harbor仓库验证
[root@k8s231 ~]# docker login -uadmin -p1 harbor.xinjizhiwa.com
[root@k8s232 ~]# docker login -uadmin -p1 harbor.xinjizhiwa.com
[root@k8s233 ~]# docker login -uadmin -p1 harbor.xinjizhiwa.com

#退出登录

[root@k8s231 ~]# docker logout  harbor.xinjizhiwa.com
[root@k8s232 ~]# docker logout  harbor.xinjizhiwa.com
[root@k8s233 ~]# docker logout  harbor.xinjizhiwa.com

5,k8s的三个节点需要配置

· 关闭swap分区

#1,查看swap;

[root@k8s231 ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           3.8G        275M        2.7G         19M        896M        3.3G
Swap:          2.0G          0B        2.0G

#2,关闭swap分区

[root@k8s231 ~]# sed -ni '/^[^#]*swap/s@^@#@p' /etc/fstab

[root@k8s232 ~]# sed -ni '/^[^#]*swap/s@^@#@p' /etc/fstab

[root@k8s233 ~]# sed -ni '/^[^#]*swap/s@^@#@p' /etc/fstab

· 节点网卡硬件编号验证是否冲突

#1,网卡编号验证;

[root@k8s231 ~]# ifconfig eth0 |grep ether |awk '{print $2}'
00:0c:29:11:c1:ab

[root@k8s232 ~]# ifconfig eth0 |grep ether |awk '{print $2}'
00:0c:29:68:4f:a4

[root@k8s233 ~]# ifconfig eth0 |grep ether |awk '{print $2}'
00:0c:29:e5:cd:da
 

#2,硬件编号

[root@k8s231 ~]# cat /sys/class/dmi/id/product_uuid 
CF364D56-E737-9C4F-8749-2DD60311C1AB

[root@k8s232 ~]# cat /sys/class/dmi/id/product_uuid 
B6C24D56-31CF-13A6-F8BB-F0C8D8684FA4

[root@k8s233 ~]# cat /sys/class/dmi/id/product_uuid 
4B6C4D56-6C69-87E2-A250-F12452E5CDDA

· 节点配置允许iptables桥接流量

cat > /etc/modules-load.d/k8s.conf << EOF
br_netfilter
EOF

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
net.ipv4.ip_forward=1
EOF

sysctl --system

· 关闭防火墙和selinux

#1,关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

#2,关闭selinux

setenforce 0
sed -i '7c SELINUX=disabled' /etc/selinux/config

三、kubeadm方式部署k8s

k8s的kubeadm方式安装,需要配置下载源(yum源);

需要yum安装

1,所有节点安装部署组件

yum安装(二选一)

#1,配置yum安装源

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
EOF

#2,查看安装源中的k8s都有什么版本?

yum -y list kubeadm --showduplicates | sort -r

#3,yum安装组件

yum -y install kubeadm-1.23.17-0 kubelet-1.23.17-0 kubectl-1.23.17-0 

本地安装(二选一)

#1,上传软件包

[root@k8s231 ~]# rz -E

#2,分发给其他k8s节点
[root@k8s231 ~]# scp kubeadm-kubelet-kubectl.tar.gz 10.0.0.232:/root/
[root@k8s231 ~]# scp kubeadm-kubelet-kubectl.tar.gz 10.0.0.233:/root/

#3,三个节点,解压软件包

tar xf kubeadm-kubelet-kubectl.tar.gz

#4,所有节点本地安装

yum -y localinstall kubeadm-kubelet-kubectl/*.rpm

#5,设置启动及开机自启动k8s

systemctl enable --now kubelet.service

#6,查看状态(此时启动失败,不用管,因为还没配置完成,配置完之后自动回启动)

systemctl status kubelet.service

2,初始化master节点(k8s231)

如果你的初始化失败,想要重新初始化:kubeadm reset -f

[root@k8s231 ~]# kubeadm init --kubernetes-version=v1.23.17 --image-repository registry.aliyuncs.com/google_containers  --pod-network-cidr=10.100.0.0/16 --service-cidr=10.200.0.0/16  --service-dns-domain=xinjizhiwa.com

#########################################################

Your Kubernetes control-plane has initialized successfully!

...

  #拷贝整数到家目录下

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

.......

#worker节点加入集群的命令

kubeadm join 10.0.0.231:6443 --token 5i55od.bk75y0qmbziynlbh \
    --discovery-token-ca-cert-hash sha256:649e813dc1163335fdf14bc7d9d399236bf63a17822f3426e2bc05ac1569e0db 

参数释义:

--pod-network-cidr=10.100.0.0/16   #pod的网段

--service-cidr=10.200.0.0/16    #service资源的网段

--service-dns-domain=xinjizhiwa.com  #service集群的dns解析名称

3,master拷贝证书到家目录下

[root@k8s231 ~]#   mkdir -p $HOME/.kube
[root@k8s231 ~]#   sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s231 ~]#   sudo chown $(id -u):$(id -g) $HOME/.kube/config

4,验证下master节点组件

#1,查看master组件

[root@k8s231 ~]# kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                 STATUS    MESSAGE                         ERROR
scheduler            Healthy   ok                              
controller-manager   Healthy   ok                              
etcd-0               Healthy   {"health":"true","reason":""}   

#查看集群节点,发现此时只有master;

[root@k8s231 ~]# kubectl get nodes
NAME     STATUS     ROLES                  AGE     VERSION
k8s231   NotReady   control-plane,master   9m53s   v1.23.17

5,worker节点加入k8s集群

#k8s232和k8s233节点执行命令

kubeadm join 10.0.0.231:6443 --token 5i55od.bk75y0qmbziynlbh \
    --discovery-token-ca-cert-hash sha256:649e813dc1163335fdf14bc7d9d399236bf63a17822f3426e2bc05ac1569e0db

6,此时查看节点

[root@k8s231 ~]# kubectl get nodes
NAME     STATUS     ROLES                  AGE   VERSION
k8s231   NotReady   control-plane,master   13m   v1.23.17
k8s232   NotReady   <none>                 40s   v1.23.17
k8s233   NotReady   <none>                 18s   v1.23.17

################

此时发现,状态显示“没准备好”,是因为未有CNI网络组件

7,master节点部署网络组件

#1,本地上传网络组建文件

[root@k8s231 ~]# rz -E
[root@k8s231 ~]# ll
..
-rw-r--r--  1 root root      4459 Nov  7 23:58 kube-flannel.yml

#2,修改文件中“net-conf.json”位置的网段信息;
[root@k8s231 ~]# vim kube-flannel.yml

  net-conf.json: |
    {
      "Network": "10.100.0.0/16",
      "Backend": {
        "Type": "vxlan"
      }
    }
 

#3,部署flannel组件

[root@k8s231 ~]# kubectl apply -f kube-flannel.yml

#4,查看flannel组件是否成功创建pod(每个节点是否都有)

[root@k8s231 ~]# kubectl get pods -A -o wide | grep flannel

8,查看节点状态,是否从notready变为ready

[root@k8s231 ~]# kubectl get nodes
NAME     STATUS   ROLES                  AGE   VERSION
k8s231   Ready    control-plane,master   25m   v1.23.17
k8s232   Ready    <none>                 12m   v1.23.17
k8s233   Ready    <none>                 12m   v1.23.17

9,小彩蛋,命令补全

yum -y install bash-completion

kubectl completion bash > ~/.kube/completion.bash.inc
echo "source '$HOME/.kube/completion.bash.inc'" >> $HOME/.bash_profile
source $HOME/.bash_profile

===========================至此,kubeadm部署k8s完成=========================

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐