本实验接着上一次实验:2021最新阿里云部署k8s集群(篇1 购买服务器)_今天不学习,明天变"咸鱼" >_<的博客-CSDN博客
注意:这篇文章在CentOS7上也能搭建,已经测试过!!!!!!!!!
只有在安装软件上有一小点不同!!!!!!!
架构解析
- 环境准备
- 安装软件
- 获取镜像
- 配置启动kubelet
- 初始化集群
- 配置网络插件
- 配置Node节点加入集群
- 集群检查
- kubelet补全命名
集群部署
Docker版本:Server Version: 20.10.8
kubeadm.....版本:v1.22.1
Kubeadm也是一个工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。
官方地址:Kubeadm | Kubernetes
环境:
192.168.9.60 | master |
---|---|
192.168.9.61 | node1 |
192.168.9.62 | node2 |
一、环境准备
master/node1/node2
#三台机器同时去修改相应的操作
1. 修改主机名hostname
[root@master ~]# hostnamectl set-hostname master
[root@node1 ~]# hostnamectl set-hostname node1
[root@node2 ~]# hostnamectl set-hostname node2
2. 进行DNS本地域名解析
# vim /etc/hosts
192.168.9.60 master
192.168.9.61 node1
192.168.9.62 node2
3. 关闭selinux防火墙
# sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux
4. 关闭firewalld
# systemctl disable firewalld
5. 关闭Swap交换分区
# sed -i 's/.*swap.*/#&/' /etc/fstab
6. 检查MAC地址和product_uuid是否有冲突
# ip link
# cat /sys/class/dmi/id/product_uuid
7. 重启系统
# reboot
二、安装软件
master/node1/node2
#三台机器同时去修改相应的操作
1. 安装docker-ce依赖软件:
# yum install wget container-selinux -y
2. 获取container包:
# wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm
3. rpm安装container包:
# rpm -ivh containerd.io-1.2.6-3.3.el7.x86_64.rpm
注意:上面的步骤在centos7中无须操作
#这个在centos8机器上不管用了
### update-alternatives --set iptables /usr/sbin/iptables-legacy
4. 安装docker-ce的Yum源及一些相关工具:
# yum install -y yum-utils device-mapper-persistent-data lvm2 && yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
5. 安装docker-ce:
# yum makecache && yum -y install docker-ce -y
6. 配置docker-ce开启自启与启动:
# systemctl enable docker.service && systemctl start docker
7. 查看docker-ce是否安装成功:
# docker info
#===============================================================================
8. 配置k8s的Yum源:
# vim /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
9. 安装k8s的组件:
# yum -y makecache
# yum install -y kubelet kubeadm kubectl ipvsadm
说明:如果想安装指定版本的kubeadmin
#yum install kubelet-1.16.0-0.x86_64 kubeadm-1.16.0-0.x86_64 kubectl-1.16.0-0.x86_64
10. 配置内核参数: #面试
# vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness=0
11. 查看参数是否配置成功:
# sysctl --system
# modprobe br_netfilter #把已经存在的内核模块加载到系统中
# sysctl -p /etc/sysctl.d/k8s.conf
12. 加载ipvs相关内核模块
如果重新开机,需要重新加载(可以写在 /etc/rc.local 中开机自动加载)
# modprobe ip_vs
# modprobe ip_vs_rr
# modprobe ip_vs_wrr
# modprobe ip_vs_sh
# modprobe nf_conntrack_ipv4
13. 查看是否加载成功
# lsmod | grep ip_vs
三、获取镜像
master/node1/node2
#三台机器同时去修改相应的操作
1. 使用工具查看当前最适合的镜像的版本:
# kubeadm config images list
k8s.gcr.io/kube-apiserver:v1.22.1
k8s.gcr.io/kube-controller-manager:v1.22.1
k8s.gcr.io/kube-scheduler:v1.22.1
k8s.gcr.io/kube-proxy:v1.22.1
k8s.gcr.io/pause:3.5 #容器之间通信
k8s.gcr.io/etcd:3.5.0-0
k8s.gcr.io/coredns/coredns:v1.8.4
2. 使用脚本快速安装镜像:
# for image in `kubeadm config images list` ; do docker pull $image; done
四、配置启动kubelet
master/node1/node2
#三台机器同时去修改相应的操作
1. 设置变量,获取docker-ce的Cgroup Drive:
# DOCKER_CGROUPS=$(docker info | grep 'Cgroup Drive' | cut -d' ' -f4)
# echo $DOCKER_CGROUPS
cgroupfs
2. 配置kubelet:
# vim /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--cgroup-driver=cgroupfs --pod-infra-container-image=k8s.gcr.io/pause:3.5"
#注意:pause:3.5为你上方安装镜像的版本
3. 启动kubelet:
# systemctl daemon-reload
# systemctl enable kubelet && systemctl start kubelet
五、初始化集群
master
注意只是master做操作
1. 进行初始化:
[root@master ~# kubeadm init --kubernetes-version=v1.22.1 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.9.60 --ignore-preflight-errors=Swap
................
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Alternatively, if you are the root user, you can run:
export KUBECONFIG=/etc/kubernetes/admin.conf
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
#--------------------------------------------------------------------------------
kubeadm join 192.168.9.60:6443 --token 79sw3m.fedp436xmfqm3its \
--discovery-token-ca-cert-hash sha256:15176715bf269c5d95df4eef62fcaf67b566a980230e1d44f8566e07c57c9f1a
#--------------------------------------------------------------------------------
#这个要进行记录,这是Node节点加入到master上的一条命令
解析
#version:是当前安装的统一版本 docker image ls
#-address:通告地址,为master的私网地址
2. 如果报错,按照下方进行清理环境,再执行初始化:
#先清理环境
[root@master ~]# kubeadm reset -f
[root@master ~]# ipvsadm --clear
[root@master ~]# systemctl daemon-reload
[root@master ~]# systemctl restart kubelet
#在执行一遍
1. 不执行以下操作,集群加入master必失败:
[root@master ~]# rm -rf $HOME/.kube
[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# echo $HOME
/root
[root@master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# chown $(id -u):$(id -g) $HOME/.kube/config
2. 查看当前集群的成员:
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master NotReady control-plane,master 76m v1.22.1
六、配置网络插件flannel
master
注意只是master做操作
1. 创建独立的目录:
[root@master flannel]# cd ~ && mkdir flannel && cd flannel
2. 获取yaml配置文件:
[root@master flannel]# curl -O https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
3. 将配置文件中的iamge镜像进行安装:
[root@master flannel]# for image in `grep 'image' kube-flannel.yml `; do docker pull $image; done
4. 修改yaml配置文件:
[root@master flannel]# vim kube-flannel.yml
containers:
- name: kube-flannel
image: quay.io/coreos/flannel:v0.14.0
command:
- /opt/bin/flanneld
args:
- --ip-masq
- --kube-subnet-mgr
- --iface=ens33 #填自己本机的网卡 ip a
5. yaml配置文件生效:
[root@master flannel]# kubectl apply -f ~/flannel/kube-flannel.yml
6. 查看名称空间
[root@master flannel]# kubectl get pods --namespace kube-system
NAME READY STATUS RESTARTS AGE
coredns-78fcd69978-nkxhc 1/1 Running 0 8m6s
coredns-78fcd69978-s5f2t 1/1 Running 0 8m6s
etcd-master 1/1 Running 0 57m
kube-apiserver-master 1/1 Running 0 57m
kube-controller-manager-master 1/1 Running 0 57m
kube-flannel-ds-4hx6r 1/1 Running 0 13m
kube-flannel-ds-5hjkr 1/1 Running 0 13m
kube-flannel-ds-b8pfn 1/1 Running 0 13m
kube-proxy-q8mck 1/1 Running 0 53m
kube-proxy-tbcpl 1/1 Running 0 53m
kube-proxy-wjqpx 1/1 Running 0 57m
kube-scheduler-master 1/1 Running 0 57m
# kubectl get service
# kubectl get svc --namespace kube-system
#====================================================================================
#问题解决:Pod一直显示"ContainerCreate",有可能是Node节点的空间不足,登入节点,清除缓存
[root@node1 ~]# free -mh
total used free shared buff/cache available
Mem: 4.0G 392M 637M 9.0M 3.0G 3.2G
Swap: 0B 0B 0B
[root@node1 ~]# echo 3 > /proc/sys/vm/drop_caches
[root@node1 ~]# free -mh
total used free shared buff/cache available
Mem: 4.0G 373M 3.3G 9.0M 299M 3.3G
Swap: 0B 0B 0B
⛔注意:如果一直显示ContainerCreate,不要去着急,有可能是在下载镜像,等个几分钟...........
七、配置所有node节点加入集群
node1/node2
注意这里是Node节点
1. 使用命令加入Master集群(此命令为k8s初始化成功时的最后最后一个命令)
[root@node1 ~]# kubeadm join 192.168.9.60:6443 --token 79sw3m.fedp436xmfqm3its --discovery-token-ca-cert-hash sha256:15176715bf269c5d95df4eef62fcaf67b566a980230e1d44f8566e07c57c9f1a
[root@node2 ~]# kubeadm join 192.168.9.60:6443 --token 79sw3m.fedp436xmfqm3its --discovery-token-ca-cert-hash sha256:15176715bf269c5d95df4eef62fcaf67b566a980230e1d44f8566e07c57c9f1a
八、集群检测
master
[root@master flannel]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready control-plane,master 5h16m v1.22.1
node1 Ready <none> 80s v1.22.1
node2 Ready <none> 65s v1.22.1
九、kubelet补全命令
master
如果之前安装了bash-completion,不用直接重启,退出当前shell直接生效
# yum -y install bash-completion
# source <(kubectl completion bash)
# echo "source <(kubectl completion bash)" >> ~/.bashrc
# reboot