基础环境配置
三台Centos7.x的服务器,主节点 cpu >=2,node节点>=1
注:(上述cpu为最低配置,否则集群安装部署会报错,无法启动,对其他硬件无硬性要求)
以下操作若无特殊说明并指定服务器,默认三台执行一样的操作!!!
配置静态网络后需确认是否可以上网;
ping通百度即可 ;
cat <<EOF >> /etc/hosts
10.0.2.15 server01
10.0.2.16 server02
10.0.2.17 server03
EOF
配置主机ip映射及主机名;
hostnamectl set-hostname xxxxxx
设置主机名,重启后生效;
systemctl disable firewalld
禁止防火墙开机自启;
systemctl stop firewalld
关闭防火墙;
sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
关闭selinux;
swapoff -a
临时关闭swap分区;
sed -i 's/.*swap.*/#&/' /etc/fstab
永久关闭swap分区;
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
EOF
修改内核参数;
modprobe br_netfilter
模块开机自启;
sysctl -p /etc/sysctl.d/k8s.conf
刷新策略生效;
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
节点重启后能自动加载所需模块;
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
授权并查看;
yum install -y wget vim net-tools epel-release yum-utils device-mapper-persistent-data lvm2 ipvsadm ipvs
安装工具及依赖包;
cd /etc/yum.repos.d
wget http://mirrors.aliyun.com/repo/Centos-7.repo
mv CentOS-Base.repo CentOS-Base.repo.bak
mv Centos-7.repo CentOS-Base.repo
配置阿里云yum源;
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
EOF
配置k8s yum源;
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
添加docker的repo源;
yum list docker-ce --showduplicates |sort -r
查看支持的docker版本;
yum remove docker-ce -y
移除之前安装过的docker;
rpm -qa | grep docker
查看已有的docker rpm包;
rpm -e --nodeps 包名
全部删除,重新安装所需版本;
yum install -y docker-ce-18.09.9-3.el7 docker-ce-cli-18.09.9-3.el7
安装docker-ce服务端及客户端;
docker --version
查看版本;
systemctl enable docker
开机自启docker;
systemctl start docker
启动docker;
vim /etc/docker/daemon.json
{ "exec-opts": ["native.cgroupdriver=systemd"] }
修改docker启动参数,docker cgroup driver为systemd;
systemctl restart docker
重启docker;
docker info | grep Cgroup
Cgroup Driver: systemd
查看刚才配置的Cgroup;
安装K8S
yum install -y kubeadm-1.15.0-0 kubectl-1.15.0-0 kubelet-1.15.0-0
指定版本安装,不指定默认最新版本安装;
-------以上所有操作三台服务器都要执行-------以上所有操作三台服务器都要执行-------以上所有操作三台服务器都要执行-----
-------以下在server01服务器上执行-------------以下在server01服务器上执行--------------以下在server01服务器上执行------------
kubeadm config images list
查看此版本k8s所需镜像版本;
使用脚本下载docker镜像并且更改标签后删除原镜像;
vim images.sh
#!/bin/bash
set -e
KUBE_VERSION=v1.16.2
KUBE_PAUSE_VERSION=3.1
ETCD_VERSION=3.3.15-0
CORE_DNS_VERSION=1.6.2
GCR_URL=k8s.gcr.io
ALIYUN_URL=registry.cn-hangzhou.aliyuncs.com/google_containers
images=(kube-proxy:${KUBE_VERSION}
kube-scheduler:${KUBE_VERSION}
kube-controller-manager:${KUBE_VERSION}
kube-apiserver:${KUBE_VERSION}
pause:${KUBE_PAUSE_VERSION}
etcd:${ETCD_VERSION}
coredns:${CORE_DNS_VERSION})
for imageName in ${images[@]} ;
do
docker pull $ALIYUN_URL/$imageName
docker tag $ALIYUN_URL/$imageName $GCR_URL/$imageName
docker rmi $ALIYUN_URL/$imageName
done
chmod +x images.sh
./images.sh
docker images
查看下载后的镜像是否都在,如不全,重新执行脚本;
systemctl enable kubelet
开机启动kubelet;
sudo kubeadm init \
--apiserver-advertise-address 10.0.2.15 \
--kubernetes-version=v1.15.0 \
--pod-network-cidr=10.244.0.0/16
初始化master;
初始化成功后会给出如下提示;
最后生成的命令记录下来,后边使用kubeadm join往集群中添加节点时会用到;
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
执行初始化成功后上图中给出的命令;
----以下操作在server02/server03上执行----以下操作在server02/server03上执行----以下操作在server02/server03上执行----
kubeadm join 10.0.2.15:6443 --token 33x0lt.vqzfnhj0m16c7ssp \
--discovery-token-ca-cert-hash sha256:51256ae406a5d2c1d7a6ba5d78d54203a6f32d95c3376e63a1b77c03f1b04247 \
--ignore-preflight-errors=all
(注意:此处不可直接粘贴,token值不一样)
将节点添加进集群;
-------以下在server01服务器上执行-------------以下在server01服务器上执行--------------以下在server01服务器上执行-----------
kubectl delete node node名字
删除节点的命令;
kubeadm reset
添加节点失败或者重新添加时使用的命令;
reset后,需要重新执行添加命令,尽量不要在master上使用,它会删除所有kubeadm配置;
kubectl get nodes
查看集群添加状态;
(注:如果kubectl get nodes 报错509,是因为没有执行初始化后给出的命令,执行下面命令;)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
再次kubectl get nodes成功;
NotReady是因为没有安装网络查件,别急这就开始安装!
安装flannel
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
下载flannel配置文件;
使用脚本拉取flannel镜像;
vim flannel.sh
#!/bin/bash
set -e
FLANNEL_VERSION=v0.11.0
QUAY_URL=quay.io/coreos
QINIU_URL=quay-mirror.qiniu.com/coreos
images=(flannel:${FLANNEL_VERSION}-amd64
flannel:${FLANNEL_VERSION}-arm64
flannel:${FLANNEL_VERSION}-arm
flannel:${FLANNEL_VERSION}-ppc64le
flannel:${FLANNEL_VERSION}-s390x)
for imageName in ${images[@]} ;
do
docker pull $QINIU_URL/$imageName
docker tag $QINIU_URL/$imageName $QUAY_URL/$imageName
docker rmi $QINIU_URL/$imageName
done
chmod +x flannel.sh
./flannel.sh
docker images
查看下载后的镜像是否都在,如不全,重新执行脚本;
kubectl apply -f kube-flannel.yml
拉取镜像成功之后,安装;
kubectl -n kube-system get pods
查看pod状态;
发现有几个没有ready,是因为node节点没有对应镜像,打包传过去load加载应用以下即可;
docker save -o pause.tar k8s.gcr.io/pause:3.1
docker save -o kube-proxy.tar k8s.gcr.io/kube-proxy
将k8s.gcr.io/pause:3.1和k8s.gcr.io/kube-proxy镜像打成包;
打完包scp到server02/server03,并在server02,server03分别执行:
docker load -i pause.tar
docker load -i kube-proxy.tar
load加载应用;
kubectl delete -f kube-flannel.yml
重新安装一次flannel;
kubectl create -f kube-flannel.yml
重新创建一次flannel;
再次kubectl -n kube-system get pods,已经全部running;
注:此区间三台全操作;
vim /var/lib/kubelet/kubeadm-flags.env
删除–network-plugin=cni参数;
systemctl restart kubelet
重启kubelet
注:此区间三台全操作;
再次kubectl get nodes,全部ready了;
这里还发现一个问题,k8s 1.16和1.15 kubectl get cs 格式不一样 获取结果显示不同;
1.16 kubectl get cs 如下:
1.15 kubectl get cs 如下:
kubectl get cs -o=go-template='{{printf "|NAME|STATUS|MESSAGE|\n"}}{{range .items}}{{$name := .metadata.name}}{{range .conditions}}{{printf "|%s|%s|%s|\n" $name .status .message}}{{end}}{{end}}'
输出的格式为:
|controller-manager|True|ok|
|scheduler|True|ok|
|etcd-0|True|{"health":"true"}|
测试dns
kubectl run curl --image=radial/busyboxplus:curl -it
nslookup kubernetes.default
出现此显示为dns没有问题;
至此完成Centos7.x使用kubeadm安装K8s集群1.15.0版本!
参考链接 :
(亲测无坑)Centos7.x使用kubeadm安装K8s集群1.15.0版本 :https://mp.weixin.qq.com/s/okqu2b3u98NAXygqbveB5g