使用kubeadm安装kubernetes 1.15

1、主机准备篇

使用vmware Workstation 10创建一台虚拟机,配置为2C/2G/50G,操作系统为CentOS Linux release 7.6.1810 (Core)

IP地址为:192.168.198.136DHCP自动分配的)

 

以root身份登录该主机,开始相关操作

禁用SELinux

# setenforce 0

# vim /etc/selinux/config

SELINUX=enforcing改为SELINUX=disabled

 

禁用防火墙

# systemctl disable firewalld

# systemctl stop firewalld

 

yum仓库中添加kubernetes

# vim /etc/yum.repos.d/kubernetes.repo

[kubernetes]

name=Kubernetes

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

enabled=1

gpgcheck=0

 

安装docker、kubelet、kubeadm、kubectl、kubernetes-cni

# yum install docker kubelet kubeadm kubectl kubernetes-cni -y

 

# systemctl enable docker && systemctl start docker

# systemctl enable kubelet && systemctl start kubelet

 

# vim /etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

net.ipv4.ip_forward = 1

 

# sysctl -p /etc/sysctl.d/k8s.conf

 

禁用交换分区

# swapoff -a

# sed -i '/ swap / s/^/#/' /etc/fstab

 

刚才的主机就作为kubernetes集群的主节点,现在克隆它,制造2台工作节点。

克隆完毕后,现在咱们的主机有3台:

192.168.198.136   2C/2G/50G   主节点

设置主机名:hostnamectl --static set-hostname master.k8s

 

192.168.198.131   2C/2G/50G   工作节点

设置主机名:hostnamectl --static set-hostname node1.k8s

 

192.168.198.132   2C/2G/50G   工作节点

设置主机名:hostnamectl --static set-hostname node2.k8s

 

为三台主机配置名称解析

# vim /etc/hosts

192.168.198.136 master.k8s

192.168.198.131 node1.k8s

192.168.198.133 node2.k8s

三台主机都得填写。

 

2、主节点初始化篇

由于初始化的过程中,要去k8s.gcr.io网站下载相关的镜像,而我们国内无法访问外网,所以只能另想其他办法。

 

找出需要下载的镜像列表

在主节点执行以下命令:

# kubeadm config images list

k8s.gcr.io/kube-apiserver:v1.15.0

k8s.gcr.io/kube-controller-manager:v1.15.0

k8s.gcr.io/kube-scheduler:v1.15.0

k8s.gcr.io/kube-proxy:v1.15.0

k8s.gcr.io/pause:3.1

k8s.gcr.io/etcd:3.3.10

k8s.gcr.io/coredns:1.3.1

这是我的结果,你在实验时,每个镜像的版本可能不一定是这样,但不影响你的实验。

 

下载每个镜像

既然国外无法下载,那就从国内下载。因为阿里云做了镜像,所以我们直接从阿里云下载。

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.15.0

 

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.15.0

 

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.15.0

 

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.15.0

 

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1

 

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.3.10

 

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.3.1

 

修改镜像的标签

docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.15.0 k8s.gcr.io/kube-apiserver:v1.15.0

 

docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.15.0 k8s.gcr.io/kube-controller-manager:v1.15.0

 

docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.15.0 k8s.gcr.io/kube-scheduler:v1.15.0

 

docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.15.0 k8s.gcr.io/kube-proxy:v1.15.0

 

docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1 k8s.gcr.io/pause:3.1

 

docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.3.10 k8s.gcr.io/etcd:3.3.10

 

docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1

 

开始初始化

# kubeadm init --pod-network-cidr=10.244.0.0/16

初始化完成后,最后会出现一行添加工作节点的命令:

kubeadm join 192.168.198.136:6443 --token 5r4ez7.srmu7uaxghoiprpr \

--discovery-token-ca-cert-hash sha256:0f31247ea401aa84d1abda61b45a46d53777f1743391d31c2152b95b34e29a43

 

在主节点上运行kubectl

要想运行kubectl,需要设置环境变量:

# export KUBECONFIG=/etc/kubernetes/admin.conf

# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile

 

# kubectl get po -n kube-system

此时可以看到coredns这个pod还未运行,因为没有安装网络插件。

# kubectl get nodes

此时可以看到主节点的状态是NotReady,因为没有安装网络插件。

 

在将工作节点加入集群前,有一点需要提前做好准备,那就是:在工作节点上运行pod时,必须要有pause镜像的支持,否则任何pod都无法运行。

目前已知在工作节点上要运行的pod有:

kube-proxy

kube-flannel

pause

由于kube-flannel刚好可以在国内下载,所以我们要处理的有kube-proxypause。

处理方法同前面的步骤,直接从阿里云下载,然后打标签即可。

注意在2个工作节点都要如此操作。具体步骤不写出来,同上。

处理完之后,就可以开始下面的步骤了。

(我在这个地方栽了半天)

 

将另外2台工作节点加入到集群中

node1.k8s上执行:

# kubeadm join 192.168.198.136:6443 \

--token 5r4ez7.srmu7uaxghoiprpr \

--discovery-token-ca-cert-hash \

sha256:0f31247ea401aa84d1abda61b45a46d53777f1743391d31c2152b95b34e29a43

 

node2.k8s上执行:

# kubeadm join 192.168.198.136:6443 \

--token 5r4ez7.srmu7uaxghoiprpr \

--discovery-token-ca-cert-hash \

sha256:0f31247ea401aa84d1abda61b45a46d53777f1743391d31c2152b95b34e29a43

 

然后到主节点上查看节点是否进入集群:

# kubectl get nodes

此时发现2台工作节点已经进入集群,只是状态为NotReady。

 

查看节点NotReady的原因

# kubectl describe node node1.k8s

得知是CNI网络插件的原因。

 

安装网络插件,我们选择flannel:

# wget \

https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

# kubectl apply -f  kube-flannel.yml

 

稍等片刻,在主节点上再次查看各节点的状态,以及各pods的状态:

# kubectl get nodes

 

# kubectl get pods -n kube-system

 

到这里,我们使用kubeadm创建了一个kubernetes集群。该集群拥有3个节点,1个主节点,2个工作节点。

中间遇到的坎有:

1、因kube-proxy镜像无法从国内下载,导致2个工作节点上无法运行kube-proxy的pod,使得整体的集群无法成功。

2、同理,pause镜像也是同样的问题。

3、在1.15版本中,好像只能使用flannel网络插件。因为我在使用另一个插件weave-net时,总是报错:

open /run/flannel/subnet.env: no such file or directory,说明在新版的kubernetes中,只能使用flannel。

 

posted @ 2019-07-19 16:24  道霖  阅读(298)  评论(0编辑  收藏  举报