(亲测无坑)Centos7.x使用kubeadm安装K8s集群1.15.0版本

基础环境配置

三台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

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页