kubeadm部署k8s集群(v1.20.2)
1.0 环境(三台主机)
| 主机名 | 地址 | 角色 | 配置 |
|---|---|---|---|
| k8s-master | 192.168.255.166 | 主节点 | 2核4G |
| k8s-node1 | 192.168.255.167 | 工作节点 | 1核2G |
| k8s-node2 | 192.168.255.168 | 工作节点 | 1核2G |
- 三台主机配置静态ip地址
具体文档:
markdown
https://blog.csdn.net/panzhengxiang/article/details/161722213?spm=1001.2014.3001.5501
- 配置主机名
bash
hostnamectl set-hostname k8s-master
su
hostnamectl set-hostname k8s-node1
su
hostnamectl set-hostname k8s-node2
su
- 配置host解析
bash
cat >> /etc/hosts <<EOF
192.168.255.166 kub-k8s-master k8s-master
192.168.255.167 kub-k8s-node1 k8s-node1
192.168.255.168 kub-k8s-node2 k8s-node2
EOF
- 关闭防护墙
bash
systemctl stop firewalld
systemctl disable firewalld
- 关闭selinux
bash
vim /etc/selinux/config
# 将selinux改为disabled
- 时间同步
bash
timedatectl set-timezone Asia/Shanghai
yum install -y ntpdate
ntpdate ntp.aliyun.com
- 关闭swap分区
bash
swapoff -a
- 配置yum源(看以下文档)
markdown
https://blog.csdn.net/panzhengxiang/article/details/161722753?spm=1001.2014.3001.5501
2.0 获取镜像(三台主机)
k8s版本和镜像版本必须保持一致
安装docker
- 安装阿里云docker源
bash
[root@localhost ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 git
[root@localhost ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 清理缓存元数据
yum --enablerepo=docker-ce-stable clean metadata
# 清理系统yum缓存
yum clean all && rm -rf /var/cache/yum
- 安装docker-ce
bash
# 网络安装
[root@localhost ~]# yum install docker-ce -y
- 启动docker服务
bash
[root@localhost ~]#systemctl enable docker
[root@localhost ~]#systemctl start docker
- 查看docker版本以及运行状态
bash
[root@localhost ~]# docker -v
[root@localhost ~]# docker info
- 配置镜像加速器
bash
bash -c "$(curl -sSL https://n3.ink/helper)"
本地导入k8s镜像
bash
# 导入镜像
docker load -i /root/kube-apiserver-v1.20.2.tar
docker load -i /root/kube-controller-manager-v1.20.2.tar
docker load -i /root/kube-proxy-v1.20.2.tar
docker load -i /root/kube-scheduler-v1.20.2.tar
docker load -i /root/etcd-3.3.15.tar
docker load -i /root/pause-3.1.tar
docker load -i /root/coredns-1.6.2.tar
# 查看镜像
[root@k8s-master ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
k8s.gcr.io/kube-proxy v1.20.2 43154ddb57a8 5 years ago 118MB
k8s.gcr.io/kube-apiserver v1.20.2 a8c2fdb8bf76 5 years ago 122MB
k8s.gcr.io/kube-controller-manager v1.20.2 a27166429d98 5 years ago 116MB
k8s.gcr.io/kube-scheduler v1.20.2 ed2c44fbdd78 5 years ago 46.4MB
k8s.gcr.io/etcd 3.3.15 b2756210eeab 6 years ago 247MB
k8s.gcr.io/coredns 1.6.2 bf261d157914 6 years ago 44.1MB
k8s.gcr.io/pause 3.1 da86e6ba6ca1 8 years ago 742kB
[root@k8s-master ~]#
3.0 集群部署(三台node)
三台服务器都需要安装kubeadmRPM包
- 配置阿里云k8s-工具yum源
bash
#
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[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
# 查看配置文件
cat /etc/yum.repos.d/kubernetes.repo
- 安装对应版本
bash
yum install -y kubelet-1.20.2-0.x86_64 kubeadm-1.20.2-0.x86_64 kubectl-1.20.2-0.x86_64 ipvsadm
- 加载ipv4相关内核模块
bash
#
cat <<EOF > /etc/modules-load.d/ipvs.conf
ip_vs
ip_vs_lc
ip_vs_wlc
ip_vs_rr
ip_vs_wrr
ip_vs_lblc
ip_vs_lblcr
ip_vs_dh
ip_vs_sh
ip_vs_nq
ip_vs_sed
ip_vs_ftp
ip_vs_sh
nf_conntrack_ipv4
ip_tables
ip_set
xt_set
ipt_set
ipt_rpfilter
ipt_REJECT
ipip
EOF
- 加载br_netfilter模块
bash
br_netfilter模块,K8S 的 iptables 规则(K8S 核心的网络策略、Service 转发、Pod 访问控制都依赖 iptables)
#
modprobe br_netfilter && echo "br_netfilter" >> /etc/modules-load.d/k8s.conf
- 配置转发相关参数
bash
#
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness=0
EOF
- 配置生效
bash
#
sysctl -p /etc/sysctl.d/k8s.conf && sysctl --system
- 重启
bash
# 查看ip_vs是否加载成功
lsmod | grep ip_vs
4.0 集群启动
4.1 三台服务器配置集群信息
- 1.配置kubelet使用pause镜像
bash
# 1.0 配置Cgoup变量
DOCKER_CGROUPS=`docker info |grep 'Cgroup' | awk ' NR==1 {print $3}'`
echo $DOCKER_CGROUPS
# 2.0 配置kubelet的cgroups
cat >/etc/sysconfig/kubelet<<EOF
KUBELET_EXTRA_ARGS="--cgroup-driver=$DOCKER_CGROUPS --pod-infra-container-image=k8s.gcr.io/pause:3.2"
EOF
tail /etc/sysconfig/kubelet
- 2.启动kubelet
bash
systemctl daemon-reload
systemctl enable kubelet && systemctl restart kubelet
4.2 master单独配置
master节点初始化
bash
# 注意:ip要进行修改
kubeadm init --kubernetes-version=v1.20.2 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.255.166
# 保存密钥
kubeadm join 192.168.255.166:6443 --token x4lw6m.rcmnw0phiv2ox50p \
--discovery-token-ca-cert-hash sha256:d541fc18fa856191d0853b7b16882cd559d35eb6a79c49a25e4a4a081ad5a3a6
报错解决(三台服务器都需要下镜像)
以下是报错:
bash
[root@k8s-master ~]# kubeadm init --kubernetes-version=v1.20.2 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.255.166
[init] Using Kubernetes version: v1.20.2
[preflight] Running pre-flight checks
[WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/
[WARNING SystemVerification]: this Docker version is not on the list of validated versions: 26.1.4. Latest validated version: 19.03
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR Swap]: running with swap on is not supported. Please disable swap
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this error execute with --v=5 or higher
[root@k8s-master ~]#
解决方案:
bash
# 通过以下命令来拉取镜像
images=(
pause:3.2
etcd:3.4.13-0
coredns:1.7.0
)
for imageName in ${images[@]} ; do
docker pull registry.aliyuncs.com/google_containers/$imageName
docker tag registry.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
docker rmi registry.aliyuncs.com/google_containers/$imageName
done
kubectl验证主服务器状态
bash
[root@k8s-master ~]# rm -rf $HOME/.kube
[root@k8s-master ~]# mkdir -p $HOME/.kube
[root@k8s-master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s-master ~]# chown $(id -u):$(id -g) $HOME/.kube/config
# 查看状态
[root@k8s-master ~]# systemctl status kubelet
准备calico网络镜像(三台服务器)
bash
docker pull calico/node:v3.20.6
docker pull calico/pod2daemon-flexvol:v3.20.6
docker pull calico/cni:v3.20.6
docker pull calico/kube-controllers:v3.20.6
部署calico网络插件
bash
# 下载网络插件
curl https://docs.projectcalico.org/v3.20/manifests/calico.yaml -O
# 部署网络插件
[root@k8s-master ~]# kubectl apply -f calico.yaml
# k8s-master中查看pod
[root@k8s-master ~] # kubectl get pod -A
4.3 node1配置
- 先确保ipvs转发模块是否开启
bash
[root@k8s-node1 ~]# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
[root@k8s-node1 ~]#
- 加入集群
bash
kubeadm join 192.168.255.166:6443 --token x4lw6m.rcmnw0phiv2ox50p \
--discovery-token-ca-cert-hash sha256:d541fc18fa856191d0853b7b16882cd559d35eb6a79c49a25e4a4a081ad5a3a6
4.4 node2配置
- 加入集群
bash
kubeadm join 192.168.255.166:6443 --token x4lw6m.rcmnw0phiv2ox50p \
--discovery-token-ca-cert-hash sha256:d541fc18fa856191d0853b7b16882cd559d35eb6a79c49a25e4a4a081ad5a3a6
4.5 master查看集群状态
bash
# 查看node状态
[root@k8s-master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane,master 14m v1.20.2
k8s-node1 Ready <none> 75s v1.20.2
k8s-node2 Ready <none> 61s v1.20.2
[root@k8s-master ~]#
#
[root@k8s-master ~]# kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-577f77cb5c-4wjcg 1/1 Running 0 5m44s
kube-system calico-node-5nmgp 1/1 Running 0 5m44s
kube-system calico-node-pqtdr 1/1 Running 0 63s
kube-system calico-node-tjtzk 1/1 Running 0 49s
kube-system coredns-74ff55c5b-6lg2j 1/1 Running 0 13m
kube-system coredns-74ff55c5b-hm2kz 1/1 Running 0 13m
kube-system etcd-k8s-master 1/1 Running 0 14m
kube-system kube-apiserver-k8s-master 1/1 Running 0 14m
kube-system kube-controller-manager-k8s-master 1/1 Running 0 14m
kube-system kube-proxy-4t425 1/1 Running 0 13m
kube-system kube-proxy-hd5vt 1/1 Running 0 49s
kube-system kube-proxy-xqngw 1/1 Running 0 63s
kube-system kube-scheduler-k8s-master 1/1 Running 0 14m
[root@k8s-master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane,master 14m v1.20.2
k8s-node1 Ready <none> 75s v1.20.2
k8s-node2 Ready <none> 61s v1.20.2
[root@k8s-master ~]#
5.0 集群关闭
关机
先关node,再关master
开机
先开master,再开node