06-【kubernetes】kubeadm初始化Kubernetes集群

一、部署K8s集群的方式

1、方式一:

(1)对master节点而言,将ApiServer、Controller Manager、Scheduler和etcd通通直接安装在master节点上运行

(2)对node节点而言,将kublet、kube-proxy和容器引擎(一般而言,是docker容器)直接安装在node节点上运行

缺点:这种部署方式非常麻烦,这在于:为了提供安全的方式,需要做很多组CA和认证方式(使用https协议进行通信)

2、方式二:

使用K8s专门的集群部署管理工具kubeadm进行部署。

(1)master,nodes节点上:安装kubelet,kubeaedm,和docker

(2)master节点上:kubeadm init。将其中一个节点初始化为master节点,初始化的方式为:将该节点上的组件ApiServer、Controller Manager、Scheduler和etcd都以pod的方式运行。值得注意的是:这些pod都是静态pod,而非K8s管理的动态pod。

(3)nodes节点上:kubeadm join。剩下的节点初始化为node节点,初始化的方式为:将这些节点上的组件kube-proxy以pod的方式运行。值得注意的是:这些pod都是静态pod,而非K8s管理的动态pod。

 

二、K8s集群的部署过程

1、前期准备:

(1)需要在各个节点(包括master节点和各个node节点)上做好解析—在/etc/hosts文件中进行配置

(2)需要各个节点(包括master节点和各个node节点)可以做到时间同步。

(3)需要在各个节点上关闭防火墙服务(firewalld服务或iptables服务),这是因为K8s会大量自动去操作很多iptables规则。

2、部署过程:

  • master节点

(1)安装docker-ce(docker-ce是docker的社区版本,docker-ee是docker的企业版本)、kubletkubeadmkubectl(kubectl是客户端访问K8s集群时要用到的命令)。

(2)在master节点上配置docker服务:在/usr/lib/systemd/system/docker.service文件中添加两行环境变量:

Environment="HTTPS_PROXY=http://www.ik8s.io:10080"                  #这个地址能够帮我们辗转访问到docker镜像

Environment="NO_PROXY=本机地址"                  #本机地址就不用代理了

配置完docker服务之后,使用命令"systemctl daemon-reload"来重新加载docker服务。

(3)启动dokcer服务并设置docker服务为开机自启动,设置kubelet服务为开机自启动(此时不需要启动kubelet服务,因为很多组件都还没有配置成功,所以会导致启动失败)。

(4)确保/proc/sys/net//bridge/bridge-nf-call-iptables文件和/proc/sys/net//bridge/bridge-nf-call-ip6tables文件中的值都是1。

(5)在master节点上初始化集群:kubeadm init --kubernetes-version=kubernetes的版本,--pod-network-cidr=pod的网络,--service-cidr=service的网络 --ignore-preflight--errors=Swap(kubeadm init命令的相关参数可以通过命令“kubeadm init --help”查看,其中参数--ignore-preflight--errors=Swap是用来禁用Swap分区的,其中参数--ignore-preflight--errors=Swap的使用还必须结合/etc/sysconfig/kubelet文件,其中/etc/sysconfig/kubelet文件中的内容为KUBELET_EXTRA_ARGS="--fail-swap-on=false")。在初始化集群完成之后,会拉取好镜像apiserver、controller manager 、scheduler、etcd、kube-prox、pause和coredns。

(6)在master节点上安装flannel插件:命令为【kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml】,查找命令的网址为【https://github.com/coreos/flannel】。该命令执行完成之后,会拉取好flannel的镜像(通过命令"docker image ls"来查看),并通过命令"kubectl get pods -n kube-system -o wide"来查看flannel插件的相关pod有没有启动成功(其中‘'-n kube-system‘’参数,用来指定命名空间为kube-system,"-o wide"参数用来获取扩展信息)。

 

  • nodes节点

(1)同master节点的(1)

(2)同master节点的(2)

(3)同master节点的(3)

(4)同master节点的(4)

(5)按照初始化集群结束后的提示(master上的(5)返回的结果)在nodes节点上进行操作。加入集群之后,需要使用命令"docker image ls"查看是否拉取好了kube-proxy镜像和flannel镜像。

 

三、自己搭建k8s-v1.1.8.2的过程

1、前期准备:

(1)需要在各个节点(包括master节点和各个node节点)上做好解析—在/etc/hosts文件中进行配置

(2)需要各个节点(包括master节点和各个node节点)可以做到时间同步。

(3)需要在各个节点上关闭防火墙服务(firewalld服务或iptables服务),这是因为K8s会大量自动去操作很多iptables规则。

2、master节点:

(1)在master节点上安装docker-ce

yum install docker-ce -y

(2)在master节点上安装kubelet-1.18.2、kubeadm-1.18.2和kubectl-1.18.2

yum list kubelet kubeadm kubectl --showduplicates | sort -r    #查找镜像仓库中有哪些版本的安装包
yum install kubelet-1.18.2 kubeadm-1.18.2 kubectl-1.18.2 -y

(3)启动docker服务,并设置docker服务开机自启;设置kubelet服务开机自启(此时不需要启动kubelet服务,因为很多组件都还没有配置成功,所以会导致启动失败)。

(4)

  • 设置docker的Cgroup为systemd,否则在初始化集群时会有警告(不过也可以忽略此警告);
  • 设置docker的阿里云镜像加速器
[root@master ~]# cat /etc/docker/daemon.json
{
  "registry-mirrors": ["https://oinh00fc.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}
[root@master ~]# systemctl daemon-reload
[root@master ~]# systemctl restart docker

(5)确保/proc/sys/net//bridge/bridge-nf-call-iptables文件和/proc/sys/net//bridge/bridge-nf-call-ip6tables文件中的值都是1。

[root@master ~]# cat /proc/sys/net/bridge/bridge-nf-call-iptables
1
[root@master ~]# cat /proc/sys/net/bridge/bridge-nf-call-ip6tables
1

(6)禁用Swap(如果不禁用Swap的话,在初始化集群时,会报ERROR错误,无法进行下去)。

  • 加入下面的参数之后,在初始化集群时仍然会有Warning警告(要求禁用Swap),但是不会有ERROR,所以此警告可以忽略。
[root@master ~]# cat /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--fail-swap-on=false"

[root@master ~]# systemctl restart kubelet

(7)初始化集群

kubeadm init  --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=Swap --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers

06-【kubernetes】kubeadm初始化Kubernetes集群_第1张图片

06-【kubernetes】kubeadm初始化Kubernetes集群_第2张图片

集群初始化完成之后,会拉取好kube-apiserver、kube-controller-manager、kube-scheduler、etcd、pause、coredns和kube-proxy镜像

但是k8s的默认镜像名字应该是下面这样的:

[root@master ~]# kubeadm config images list

所以要修改镜像的名字

#修改镜像的名字
[root@master ~]# docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.18.2 k8s.gcr.io/kube-proxy:v1.18.2
[root@master ~]# docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.18.2 k8s.gcr.io/kube-apiserver:v1.18.2
[root@master ~]# docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.18.2 k8s.gcr.io/kube-scheduler:v1.18.2
[root@master ~]# docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.18.2 k8s.gcr.io/kube-controller-manager:v1.18.2
[root@master ~]# docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2
[root@master ~]# docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.6.7 k8s.gcr.io/coredns:1.6.7
[root@master ~]# docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.3-0 k8s.gcr.io/etcd:3.4.3-0

#删除原来的镜像
[root@master ~]# docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.18.2
[root@master ~]# docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.18.2
[root@master ~]# docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.18.2
[root@master ~]# docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.18.2
[root@master ~]# docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2
[root@master ~]# docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.6.7
[root@master ~]# docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.3-0

(8)kubectl 是管理 Kubernetes Cluster 的命令行工具。Master 初始化完成后需要做一些配置工作,然后 kubectl 就能使用了。

 mkdir -p $HOME/.kube
 sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
 sudo chown $(id -u):$(id -g) $HOME/.kube/config

(9)在master节点上安装flannel插件:

[root@master ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

flannel插件安装成功之后,会拉取flannel镜像

06-【kubernetes】kubeadm初始化Kubernetes集群_第3张图片

(10)查看组件的信息、nodes的信息和pods的信息

#查看component status(简称cs)的状态
[root@master ~]# kubectl get cs
NAME                 STATUS    MESSAGE             ERROR
controller-manager   Healthy   ok
scheduler            Healthy   ok
etcd-0               Healthy   {"health":"true"}
#值得注意的是:看不到apiserver是否健康,这是因为apiserver一定是健康的,如果apiserver不健康,就看不到controller-manager、scheduler和etcd组件是健康的。其中kube-proxy不是以组件的形式展示对额,而是插件的方式,所以看不到。


#查看nodes的状态
[root@master ~]# kubectl get nodes
NAME     STATUS   ROLES    AGE     VERSION
master   Ready    master   3h15m   v1.18.2


#查看pods的状态
[root@master ~]# kubectl get pods -n kube-system
NAME                             READY   STATUS    RESTARTS   AGE
coredns-546565776c-448jk         1/1     Running   1          3h15m
coredns-546565776c-k7whb         1/1     Running   1          3h15m
etcd-master                      1/1     Running   2          3h15m
kube-apiserver-master            1/1     Running   2          3h15m
kube-controller-manager-master   1/1     Running   7          3h15m
kube-flannel-ds-amd64-hs2ck      1/1     Running   2          73m
kube-proxy-n7cmq                 1/1     Running   2          3h15m
kube-scheduler-master            1/1     Running   7          3h15m

3、nodes节点:

(1)同master节点的(1)

(2)同master节点的(2)

(3)同master节点的(3)

(4)同master节点的(4)

(5)同master节点的(5)

(6)同master节点的(6)

(7)nodes节点加入集群

[root@node02 ~]#  kubeadm join 10.0.2.2:6443 --token 6bm3bd.84kn0tr02cxm91uj --discovery-token-ca-cert-hash sha256:a1dc28153a5a8ff9358b5916650baba22b774c91ed95aa9076b40cd426bbd5d5  --ignore-preflight-errors=Swap

加入集群之后,会拉取好kube-proxy、pause和flannel的镜像

4、在master节点上,查看集群是否搭建成功

(1)查看nodes的状态

[root@master ~]# kubectl get nodes           #显示Ready则表示成功
NAME     STATUS   ROLES    AGE     VERSION
master   Ready    master   4h19m   v1.18.2
node01   Ready       45m     v1.18.2
node02   Ready       35m     v1.18.2

(2)查看pods的状态

[root@master ~]# kubectl get ns        #查看k8s默认的namespace
NAME              STATUS   AGE
default           Active   4h19m
kube-node-lease   Active   4h19m
kube-public       Active   4h19m
kube-system       Active   4h19m
[root@master ~]# kubectl get pods -n kube-system -o wide      #都显示为Running,则表示成功
NAME                             READY   STATUS    RESTARTS   AGE     IP           NODE     NOMINATED NODE   READINESS GATES
coredns-546565776c-448jk         1/1     Running   1          4h20m   10.244.0.4   master              
coredns-546565776c-k7whb         1/1     Running   1          4h20m   10.244.0.5   master              
etcd-master                      1/1     Running   2          4h20m   10.0.2.2     master              
kube-apiserver-master            1/1     Running   2          4h20m   10.0.2.2     master              
kube-controller-manager-master   1/1     Running   7          4h20m   10.0.2.2     master              
kube-flannel-ds-amd64-2zd7f      1/1     Running   0          36m     10.0.2.4     node02              
kube-flannel-ds-amd64-6b8pq      1/1     Running   0          47m     10.0.2.3     node01              
kube-flannel-ds-amd64-hs2ck      1/1     Running   2          138m    10.0.2.2     master              
kube-proxy-n7cmq                 1/1     Running   2          4h20m   10.0.2.2     master              
kube-proxy-qfc2v                 1/1     Running   1          47m     10.0.2.3     node01              
kube-proxy-vpflj                 1/1     Running   1          36m     10.0.2.4     node02              
kube-scheduler-master            1/1     Running   7          4h20m   10.0.2.2     master              

 

 

可以查看别人的博客:https://blog.csdn.net/qq_35887546/article/details/105557420

 

 

如何查看k8s中组件apiserver监听哪个端口:

[root@master ~]# ss -tnl
State       Recv-Q Send-Q                                 Local Address:Port                                                Peer Address:Port
LISTEN      0      128                                        127.0.0.1:10248                                                          *:*
LISTEN      0      128                                        127.0.0.1:10249                                                          *:*
LISTEN      0      128                                        127.0.0.1:2379                                                           *:*
LISTEN      0      128                                         10.0.2.2:2379                                                           *:*
LISTEN      0      128                                         10.0.2.2:2380                                                           *:*
LISTEN      0      128                                        127.0.0.1:2381                                                           *:*
LISTEN      0      128                                        127.0.0.1:33008                                                          *:*
LISTEN      0      128                                        127.0.0.1:10257                                                          *:*
LISTEN      0      128                                        127.0.0.1:10259                                                          *:*
LISTEN      0      128                                                *:22                                                             *:*
LISTEN      0      100                                        127.0.0.1:25                                                             *:*
LISTEN      0      128                                               :::10250                                                         :::*
LISTEN      0      128                                               :::10251                                                         :::*
LISTEN      0      128                                               :::6443    #监听6443端口                                                       :::*
LISTEN      0      128                                               :::10252                                                         :::*
LISTEN      0      128                                               :::10256                                                         :::*
LISTEN      0      128                                               :::22                                                            :::*
LISTEN      0      100                                              ::1:25                                                            :::*

你可能感兴趣的:(kubernetes)