01-k8s集群部署(kubeadm方式)及harbor仓库
本次使用kubeadm方式,部署1.23.17版本;
安装包百度云盘地址:
链接:https://pan.baidu.com/s/1PiIYXPyNkVuxBnuxBpvKHA?pwd=s04r
提取码:s04r
一、虚拟机准备
搭建学习环境,使用4台虚拟机centos7系统;
| 主机名称 | ip地址 | 资源 | 备注 |
| harbor | 10.0.0.230 | 1核2g | 镜像仓库 |
| k8s231 | 10.0.0.231 | 2核4g | master节点 |
| k8s232 | 10.0.0.232 | 2核4g | worker节点 |
| k8s233 | 10.0.0.233 | 2核4g | worker节点 |
二、各个节点环境准备
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
EOFcat > /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
EOFsysctl --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.ymlnet-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完成=========================
更多推荐


所有评论(0)