centos7.5部署kubernetes 1.12.2记录

环境准备

部署环境规划如下

节点IP备注
k8s-master10.0.0.251master节点
k8s-node110.0.0.252node节点1
k8s-node210.0.0.253node节点2

 

 

 

 

 

部署前准备

1.设置各个节点主机名称和配置域名解析

注意:各个节点的主机名要不一样,主机名重复会造成各个节点工作不正常

设置主机名

[root@k8s-master ~]# hostnamectl set-hostname k8s-master

[root@k8s-node1 ~]# hostnamectl set-hostname k8s-node1

[root@k8s-node2 ~]# hostnamectl set-hostname k8s-node2

配置域名解析

[root@k8s-master ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
10.0.0.251 k8s-master
10.0.0.252 k8s-node1
10.0.0.253 k8s-node2

[root@k8s-node1 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
10.0.0.251 k8s-master
10.0.0.252 k8s-node1
10.0.0.253 k8s-node2

[root@k8s-node2 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
10.0.0.251 k8s-master
10.0.0.252 k8s-node1
10.0.0.253 k8s-node2

2.所有节点关闭防火墙

[root@k8s-master ~]# systemctl stop firewalld && systemctl disable firewalld

[root@k8s-node1 ~]# systemctl stop firewalld && systemctl disable firewalld

[root@k8s-node2 ~]# systemctl stop firewalld && systemctl disable firewalld

3.所有节点关闭selinux

[root@k8s-master ~]# vi /etc/selinux/config

SELINUX=disabled

[root@k8s-node1 ~]# vi /etc/selinux/config

SELINUX=disabled

[root@k8s-node2 ~]# vi /etc/selinux/config

SELINUX=disabled

4.所有节点关闭交换分区

 

[root@k8s-master ~]# sed -ri 's/.*swap.*/#&/' /etc/fstab

[root@k8s-nodes1 ~]# sed -ri 's/.*swap.*/#&/' /etc/fstab

[root@k8s-node2 ~]# sed -ri 's/.*swap.*/#&/' /etc/fstab

5.所有节点配置IP转发相关配置

[root@k8s-master ~]#  echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables

[root@k8s-master ~]#  echo 1 > /proc/sys/net/bridge/bridge-nf-call-ip6tables

[root@k8s-node1 ~]#  echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables

[root@k8s-node1 ~]#  echo 1 > /proc/sys/net/bridge/bridge-nf-call-ip6tables

[root@k8s-node2 ~]#  echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables

[root@k8s-node2 ~]#  echo 1 > /proc/sys/net/bridge/bridge-nf-call-ip6tables

6.关闭交换分区和设置selinux需要重启机器才能生效,重启机器

[root@k8s-master ~]#  reboot

[root@k8s-node1 ~]#  reboot

[root@k8s-node2 ~]#  reboot

 

初始化集群

1.配置docker和k8s的yum源

docker的yum源采用直接下载

[root@k8s-master ~]#  [root@k8s-master yum.repos.d]# cd /etc/yum.repos.d && wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

[root@k8s-node1 ~]#  [root@k8s-master yum.repos.d]# cd /etc/yum.repos.d && wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

[root@k8s-node2 ~]#  [root@k8s-master yum.repos.d]# cd /etc/yum.repos.d && wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

k8s的yum源

[root@k8s-master ~]# vim /etc/yum.repos.d/kubernetes.repo

[kubernetes]

name=Kubernetes Repo

baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/

gpgcheck=0

enabled=1

 

[root@k8s-node1 ~]# vim /etc/yum.repos.d/kubernetes.repo

[kubernetes]

name=Kubernetes Repo

baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/

gpgcheck=0

enabled=1

 

[root@k8s-node2 ~]# vim /etc/yum.repos.d/kubernetes.repo

[kubernetes]

name=Kubernetes Repo

baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/

gpgcheck=0

enabled=1

2.安装docker

注意:k8s不同版本对docker有要求,k8s与docker的版本匹配情况需要查看官网说明。这里的k8s v1.12.2采用的是docker-ce -18.06版本,如果选择的docker版本与k8s不匹配,安装过程会报错docker不支持。

[root@k8s-master ~]# yum install docker-ce-18.06.0.ce-3.el7 -y

[root@k8s-node1 ~]# yum install docker-ce-18.06.0.ce-3.el7 -y

[root@k8s-node2 ~]# yum install docker-ce-18.06.0.ce-3.el7 -y

3.安装kubeadm kubelet kubectl

注意:不要使用命令

yum install -y kubeadm-1.12.2 kubelet-1.12.2  kubectl-1.12.2 --disableexcludes=kubernetes 安装

kubeadm软件包会依赖与kubelet,kubectl。在安装kubeadm过程中会自动安装其默认依赖的1.14的kubelet和kubectl,安装kubeadm执行后,机器上就已经含有1.14版本的kubelet,后面的kubelet-1.12.2不会再安装,导致执行后面执行init命令错误,分开安装,并且kubelet和kubectl在前面,kubeadm在最后。

[root@k8s-master ~]# yum install -y kubelet-1.12.2 --disableexcludes=kubernetes

[root@k8s-master ~]# yum install -y kubectl-1.12.2 --disableexcludes=kubernetes

[root@k8s-master ~]# yum install -y kubeadm-1.12.2 --disableexcludes=kubernetes

 

[root@k8s-node1 ~]# yum install -y kubelet-1.12.2 --disableexcludes=kubernetes

[root@k8s-node1 ~]# yum install -y kubectl-1.12.2 --disableexcludes=kubernetes

[root@k8s-node1 ~]# yum install -y kubeadm-1.12.2 --disableexcludes=kubernetes

 

[root@k8s-node2 ~]# yum install -y kubelet-1.12.2 --disableexcludes=kubernetes

[root@k8s-node2 ~]# yum install -y kubectl-1.12.2 --disableexcludes=kubernetes

[root@k8s-node2 ~]# yum install -y kubeadm-1.12.2 --disableexcludes=kubernetes

4.所有节点启动docker,同时设置kubelet开机自启动否则,否则后面预检查提示错误。

[root@k8s-master ~]# systemctl enable docker && systemctl start docker 

[root@k8s-master ~]# systemctl enable kubelet

 

[root@k8s-node1~]# systemctl enable docker && systemctl start docker 

[root@k8s-node1 ~]# systemctl enable kubelet

 

[root@k8s-node2 ~]# systemctl enable docker && systemctl start docker 

[root@k8s-node2 ~]# systemctl enable kubelet

5.所有节点导入k8s安装依赖的镜像包。

链接:https://pan.baidu.com/s/1tXJYL7-KdPJRRlPBg83OyQ

提取码:bxwn

[root@k8s-master ~]# docker load -i k8s.gcr.io.basic.tar.gz

[root@k8s-node1 ~]# docker load -i k8s.gcr.io.basic.tar.gz

[root@k8s-node2 ~]# docker load -i k8s.gcr.io.basic.tar.gz

6.初始化master节点,这一步很关键,也会输出很多的信息。

[root@k8s-master ~]#  kubeadm init --kubernetes-version=v1.12.2 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12

注意:执行这条命令后,查看/var/log/messages日志可能提示cni config uninitialized错误。

可以采用如下方式解决:

编辑文件/var/lib/kubelet/kubeadm-flags.env,去掉network-plugin=cni 就可以了。然后重启kubelet服务

[root@k8s-master ~]#  vi /var/lib/kubelet/kubeadm-flags.env

[root@k8s-master ~]#  KUBELET_KUBEADM_ARGS=--cgroup-driver=systemd --cni-bin-dir=/opt/cni/bin --cni-conf-dir=/etc/cni/net.d

[root@k8s-master ~]#  systemctl restart kubelet

另外执行这条命令以后,控制台会输出一条node加入节点所需要执行的命令

kubeadm join 10.0.0.251:6443 --token c5vrrw.w6omvs8c8gkslmbr --discovery-token-ca-cert-hash sha256:3917060e94d8f7d9ac0dfe0c7adfcd59fd9d08e773644471e976e256eaec6cb1

还会输出后面配置配置kubectl权限的命令语句。

这个时候coredns还处于peddding状态,因为coredns需要部署到node节点上,加入node节后,coredns才会变为running状态

7.master节点配置kubectl权限,使master节点可以执行kubectl命令。

[root@k8s-master ~]#  mkdir -p $HOME/.kube

[root@k8s-master ~]#  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

[root@k8s-master ~]#  sudo chown $(id -u):$(id -g) $HOME/.kube/config

8.部署flannel网络插件

[root@k8s-master ~]#  wget https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml

[root@k8s-master ~]#  kubectl apply -f kube-flannel.yml

 

添加node节点

1.执行master节点上init后控制台输出的kubeadm join命令,将node节点添加到集群中。

[root@k8s-node1 ~]# kubeadm join 10.0.0.251:6443 --token c5vrrw.w6omvs8c8gkslmbr --discovery-token-ca-cert-hash sha256:3917060e94d8f7d9ac0dfe0c7adfcd59fd9d08e773644471e976e256eaec6cb1

[root@k8s-node2 ~]# kubeadm join 10.0.0.251:6443 --token c5vrrw.w6omvs8c8gkslmbr --discovery-token-ca-cert-hash sha256:3917060e94d8f7d9ac0dfe0c7adfcd59fd9d08e773644471e976e256eaec6cb1

执行命令后,两个节点的状态也是notready状态,查看系统日志同样会提示cni config uninitialized错误,采取和master节点一样的处理方式,修改配置文件,然后重启kubelet服务

[root@k8s-node1 ~]#  vi /var/lib/kubelet/kubeadm-flags.env

[root@k8s-node1 ~]#  KUBELET_KUBEADM_ARGS=--cgroup-driver=systemd --cni-bin-dir=/opt/cni/bin --cni-conf-dir=/etc/cni/net.d

[root@k8s-node1 ~]#  systemctl restart kubelet

[root@k8s-node2 ~]#  vi /var/lib/kubelet/kubeadm-flags.env

[root@k8s-node2 ~]#  KUBELET_KUBEADM_ARGS=--cgroup-driver=systemd --cni-bin-dir=/opt/cni/bin --cni-conf-dir=/etc/cni/net.d

[root@k8s-node2 ~]#  systemctl restart kubelet

 

验证

1.检查各个节点的状态是否正常

[root@k8s-node1 ~]#  kubectl get node

2.检查系统pod是否正常

[root@k8s-master ~]# kubectl get po --all-namespaces -o wide

 

遗留问题

1.如果执行初始化master节点以后,不部署flannel网络插件而是直接加入node节点,加入node节点以后,再部署flannel网络插件,这个时候发布的Pod正常不?

测试的结果为不正常,先添加node节点,再部署flannel网络插件,然后发布pod,发现pod的IP地址并不在初始化集群定义的IP网段内,IP无法ping通。部署flannel网络插件的动作应该放在初始化集群后,添加node节点之前执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值