Kubeadm部署k8s集群:

1、实验准备:三台虚拟机
本次实验安装版本为1.9.1版本所有镜像也为指定镜像
Kub-k8s-master 10.0.0.135
Kub-k8s-node1 10.0.0.136
Kub-k8s-node2 10.0.0.137
2、三台虚拟机互做解析,关闭防火墙及selinux,保证base、epe仓库可用,网络畅通。
三台都做:
>vim /etc/hosts
10.0.0.135 kub-k8s-master
10.0.0.136 kub-k8s-node1
10.0.0.137 kub-k8s-node2
3、每台服务器下载docker版本自定义。
配置阿里云docker yum源:
>yum install -y yum-utils device-mapper-persistent-data lvm2 git
>yum-config-manager —add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装指定版本:
可以使用
>yum list docker-ce —showduplicates
查看版本
需要指定完整的rpm包的包名,并且加上—setopt=obsoletes=0
参数:
> yum install -y —setopt=obsoletes=0 \
docker-ce-17.03.2.ce-1.el7.centos.x86_64 \
docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch
安装Docker新版本(比如Docker 19.03.0):
>yum install docker-ce-19.03.0.ce -y
或者
>yum install docker-ce -y
下载完毕后启动docker:
>systemctl start docker
>systemctl enable docker
查看docker运行状态:
>docker info
安装方式2:
>yum install -y yum-utils device-mapper-persistent-data lvm2 git
>yum-config-manager —add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
>yum install docker-ce -y
>systemctl start docker && systemctl enable docker

  1. 关闭swap分区:

swapoff -a
修改/etc/fstab文件,注释掉SWAP的自动挂载,使用free -m确认swap已经关闭。
2.注释掉swap分区:
[root@localhost /]# sed -i ‘s/.swap./#&/‘ /etc/fstab
# free -m
total used free shared buff/cache available
Mem: 3935 144 3415 8 375 3518
Swap: 0 0 0
5、拉取所需的镜像(三台都执行):
制作一个脚本将需要拉取的镜像拉取命令,放在脚本内之后一键执行:
>vim pull.sh
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.19.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.19.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.19.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.19.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.7.0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.13-0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2
还有一个flanneld的镜像不fq是拉不下来的,推荐直接本地上传之后
>docker load < flanneld-v0.12.0-amd64.docker
6、给每个镜像打一个可以被识别的tag:
同样是制作脚本的方式一键执行:
>vim tag.sh
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.19.1 k8s.gcr.io/kube-controller-manager:v1.19.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.19.1 k8s.gcr.io/kube-proxy:v1.19.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.19.1 k8s.gcr.io/kube-apiserver:v1.19.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.19.1 k8s.gcr.io/kube-scheduler:v1.19.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.7.0 k8s.gcr.io/coredns:1.7.0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.13-0 k8s.gcr.io/etcd:3.4.13-0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2
注意:版本不需要改变,只需要改变路径名称就行

  1. 在所有节点安装kubeadm和kubelet:

配置源
# cat < /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
安装:
>yum makecache fast
> yum install -y kubelet-1.17.4-0.x86_64 kubeadm-1.17.4-0.x86ctl-1.17.4-0.x86_64 ipvsadm

  1. 加载ipvs相关内核模块:

如果重新开机,需要重新加载(可以写在 /etc/rc.local 中开机自动加载)
>vim ipvs.sh
# modprobe ip_vs
# modprobe ip_vs_rr
# modprobe ip_vs_wrr
# modprobe ip_vs_sh
# modprobe nf_conntrack_ipv4
>chmod 777 ipvs.sh
>./ipvs.sh
编辑文件添加开机启动
# vim /etc/rc.local
# chmod +x /etc/rc.local

  1. 配置转发相关参数,否则可能会出错:

cat < /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness=0
EOF
使配置生效:
>sysctl —system
如果net.bridge.bridge-nf-call-iptables报错,加载br_netfilter模块
>modprobe br_netfilter
>sysctl -p /etc/sysctl.d/k8s.conf
查看是否加载成功:
>lsmod | grep ip_vs
ip_vs_sh 12688 0
ip_vs_wrr 12697 0
ip_vs_rr 12600 0
ip_vs 141092 6 ip_vs_rr,ip_vs_sh,ip_vs_wrr
nf_conntrack 133387 2 ip_vs,nf_conntrack_ipv4
libcrc32c 12644 3 xfs,ip_vs,nf_conntrack
kubeadm部署k8s集群 - 图1

  1. 配置启动所有节点的kubelet(所有节点操作):

配置kubelet使用pause镜像:
获取docker的cgroups
>systemctl start docker && systemctl enable docker
>DOCKER_CGROUPS=$(docker info | grep ‘Cgroup’ | cut -d’ ‘ -f4)
>echo $DOCKER_CGROUPS
配置变量:
>DOCKER_CGROUPS=docker info |grep 'Cgroup' | awk '{print $3}'
>echo $DOCKER_CGROUPS
配置kubelet的cgroups
# cat >/etc/sysconfig/kubelet<KUBELET_EXTRA_ARGS=”—cgroup-driver=$DOCKER_CGROUPS —pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.2”
EOF

.配置kubelet的cgroups
# cat >/etc/sysconfig/kubelet<KUBELET_EXTRA_ARGS=”—cgroup-driver=$DOCKER_CGROUPS —pod-infra-container-image=k8s.gcr.io/pause:3.2”
EOF

cat >/etc/sysconfig/kubelet<KUBELET_EXTRA_ARGS=”—cgroup-driver=cgroupfs —pod-infra-container-image=k8s.gcr.io/pause:3.2”
EOF

  1. 启动:

systemctl daemon-reload
>systemctl enable kubelet && systemctl restart kubelet
这里使用status查看启动状态报错是正常的,需要我们配置完之后才会正常启动。

  1. 配置master节点:

运行初始化:
初始化之前,切记要关闭防火墙和selinux,cpu核心数至少为2
>kubeadm init —kubernetes-version=v1.19.1 —pod-network-cidr=10.244.0.0/16 —apiserver-advertise-address=10.0.0.135 —ignore-preflight-errors=Swap
注:
apiserver-advertise-address=192.168.246.166 —-master的ip地址。
—kubernetes-version=v1.16.1 —更具具体版本进行修改
注意在检查一下swap分区是否关闭