其他分享
首页 > 其他分享> > [云原生专题-24]:K8S - Kubernetes(K8S)Master集群构建与安装过程详细解读 - 初始控制节点的安装

[云原生专题-24]:K8S - Kubernetes(K8S)Master集群构建与安装过程详细解读 - 初始控制节点的安装

作者:互联网

作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/122759250


目录

第一步:集群规划

1.1 K8S的官方架构

1.2 K8S的实验架构

1.3 主要步骤

1.4 K8S集群搭建方式选择

1.5 官方参考

第二步:搭建云服务器

2.1 安装服务器

2.2 安装后检查

第三步:搭建Docker环境(云平台手工操作)

3.1  为每台虚拟服务器安装docker环境

3.2 为每台虚拟服务器启动docker环境

3.3 为K8S修改 docker配置

第四步:K8前的安装前的准备

4.1 关闭防火墙

4.2 关闭swap

4.3 设置内网静态IP地址

4.4 配置IPtable-流量桥接

第五步:搭建集群K8S Initial Mananger节点

5.1 安装 kubeadm、kubectl(mananger节点特有)、kubelet

5.2 google_containers 配置(可选)

5.3 kubeadm init创建leader mananger节点

第六步:kubeadm init后处理: 创建kube配置文件

6.2  安装第三方网络插件

6.3  检查节点的安装情形


第一步:集群规划

1.1 K8S的官方架构

1.2 K8S的实验架构

 构建2个mananger节点 + 3  worker节点的集群网络。

1.3 主要步骤

第一步:安装初始mananger节点

第二步:安装worker节点

第三步:安装其他mananger节点

1.4 K8S集群搭建方式选择

方式1:minikube

minikube可以在本地运行Kubernetes的工具,minikube可以在个人计算机(包括Windows,macOS和Linux PC)上运行一个单节点Kubernetes集群,以便您可以试用Kubernetes或进行日常开发工作;

Hello Minikube | Kubernetes

方式2:kind

Kind和minikube类似的工具,让你在本地计算机上运行Kubernetes,此工具需要安装并配置Docker;

方式3:kubeadm

Kubeadm是一个K8s部署工具,提供kubeadm init 和 kubeadm join两个操作命令,可以快速部署一个Kubernetes集群;

本文选择第三种方式 

kubeadm是官方社区推出的一个用于快速部署 kubernetes 集群的工具,这个工具能通过两条指令完成一个kubernetes集群的部署;

(1)创建一个Mananger leader节点

$ kubeadm init

(2)将Node节点加入到Master集群中

$ kubeadm join <Master节点的IP和端口>

因此需要在Mananger节点和worker节点都需要安装。

方式4:二进制包

从Github下载发行版的二进制包,手动部署安装每个组件,组成Kubernetes集群,步骤比较繁琐,但是能让你对各个组件有更清晰的认识;

方式5:yum安装

通过yum安装Kubernetes的每个组件,组成Kubernetes集群,不过yum源里面的k8s版本已经比较老了,所以这种方式用得也比较少了;

方式6:第三方工具

有一些大神封装了一些工具,利用这些工具进行k8s环境的安装;

方式7:花钱购买

直接购买类似阿里云这样的k8s公有云平台,一键搞定;

1.5 官方参考

Kubeadm | Kubernetes

Installing kubeadm | Kubernetes

第二步:搭建云服务器

2.1 安装服务器

(1)服务器

(2)网络

(3)默认安全组

2.2 安装后检查

(1)通过公网IP登录到每台服务器

 

(2) 为服务器划分角色:initial mananger

公网IP地址:47.99.96.250

私网IP地址:172.24.130.172

(3)修改主机名

修改主机名的目的是为了后续可以通过主机名来访问主机,而不是通过IP地址。

当然,如果需要通过主机名访问,还需要修改配置,实现主机名与IP地址的映射。

hostnamectl set-hostname k8s-master1

(4)建立主机名与IP地址的映射表,以便通过主机名访问主机

$ vim /etc/hosts
172.24.130.172 k8s-master1

172.24.130.172 etcd
172.24.130.172 registry
172.24.130.172 cluster-endpoint

(5)安装ifconfig和ping工具(针对没有ping工具的主机)

$ yum install -y yum-utils

$ yum install iputils

$ yum install net-tools.x86_64

(6)通过私网IP可以ping通

ping k8s-master1
ping cluster-endpoint

第三步:搭建Docker环境(云平台手工操作)

CentOS Docker 安装 | 菜鸟教程

How nodes work | Docker Documentation

3.1  为每台虚拟服务器安装docker环境

(1)ssh到虚拟服务器中

(2)一键安装docker环境

 yum-config-manager命令是仓(/etc/yum.repos.d/下的文件)进行增删改查
系统默认没有安装这个命令,这个命令在yum-utils包里,可以通过yum install -y yum-utils安装.

yum repolist all # 显示所有资源库
yum repolist enabled # 显示所有已启动的资源库
yum repolist disabled # 显示所有被禁用的资源库
# 增加阿里云镜像repo
$ yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 清华镜像
$ yum-config-manager --add-repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo

# 官方镜像
$ yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

(3)手工非一键安装

# 卸载
$ yum remove docker-ce
$ rm -rf /var/lib/docker

# 非一键安装最新版本
yum install docker-ce docker-ce-cli containerd.io

# 非一键安装指定版本
# 通过其完整的软件包名称安装特定版本,该软件包名称是软件包名称(docker-ce)加上版本字符串(第二列),
# 从第一个冒号(:)一直到第一个连字符,并用连字符(-)分隔。
# 例如:docker-ce-18.09.1。
yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io

3.2 为每台虚拟服务器启动docker环境

$ systemctl start docker

$ docker version

$ docker ps

$ docker images

$ docker info

3.3 为K8S修改 docker配置

$ vim /etc/docker/daemon.json
>>
{ 
  "registry-mirrors": ["https://obww7jh1.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}

其中"exec-opts": ["native.cgroupdriver=systemd"]是K8S所需要的。

限定K8S的程序,以systemd的方式在后台运行。

# 重启docker
$ systemctl daemon-reload
$ systemctl restart docker

第四步:K8前的安装前的准备

4.1 关闭防火墙

之所以要关闭防火墙,是因为集群内的机器需要通过私网进行通信,如果不关闭防火墙,可能会导致集群内机器通信失败,出现K8S安装失败时,定位问题困难。

$ 临时禁用
$ systemctl stop firewalld
$ systemctl disable firewalld

# setenforce是Linux的selinux防火墙配置命令, 执行setenforce 0 表示关闭selinux防火墙)
$ setenforce 0

# 永久禁用
$ vim /etc/selinux/config
SELINUX=disabled

iptables防火墙,会对所有网络流量进行过滤、转发,如果是内网机器一般都会直接关闭,省的影响网络性能,但k8s不能直接关了,k8s是需要用防火墙做ip转发和修改的,当然也看使用的网络模式,如果采用的网络模式不需要防火墙也是可以直接关闭的。

4.2 关闭swap

交换分区,英文的说法是swap,意思是“交换”、“实物交易”。它的功能就是在内存不够的情况下,操作系统先把内存中暂时不用的数据,存到硬盘的交换空间,腾出内存来让别的程序运行,和Windows的虚拟内存(pagefile.sys)的作用是一样的。

将部分内存数据存放到磁盘中,这个这样会使性能下降,为了性能考虑推荐关掉,增加内存。

# 临时关闭
$ swapoff -a

# 永久关闭
$ vim /etc/fstab
>>
#/dev/mapper/centos-swap swap                    swap    defaults        0 0

# 使用free -m确认swap已经关闭。swap部分为0
$ free -m

4.3 设置内网静态IP地址

(1)ipconfig查看网卡名称

(2)vim /etc/sysconfig/network-scripts/ifcfg-网卡名称

根据自己系统的实际情况修改IP地址。

master配置:
BOOTPROTO="static" # 
IPADDR="172.24.130.170" # IP
NETMASK="255.255.248.0" # mask
#GATEWAY="172.24.130.1" # 网关地址(使用route -n 第一行就是默认的网关)
#DNS1="8.8.8.8" # DNS服务器 (cat /etc/resolv.conf 查看)

4.4 配置IPtable-流量桥接

方法1(推荐)

$ cd /etc/sysctl.d
$ touch k8s.conf
$ vim k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness=0

# 使得配置文件生效
$ modprobe br_netfilter
$ sysctl --system -p /etc/sysctl.d/k8s.conf

方法2:

对于 RHEL/CentOS 7 系统,可以会由于 iptables 被绕过导致网络请求被错误的路由。所以还需执行如下命令保证 sysctl 配置中 net.bridge.bridge-nf-call-iptables 被设为1。

$ vi /etc/sysctl.conf

# 添加如下内容
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

$ sysctl --system

第五步:搭建集群K8S Initial Mananger节点

5.1 安装 kubeadm、kubectl(mananger节点特有)、kubelet

(1)修改K8S配置:  K8S的yum源(kubernetes.repo)

$ 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=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

(2)安装kubeadm、kubectl、kubelet

$ yum install -y kubelet kubeadm kubectl

# kubelet需要手工启动
$ systemctl enable --now kubelet

之所以在master上可以部署kubelet,是因为K8S支持在单一机器上部署集群,如果不是在单个机器上部署集群,就可以不用在master上安装kubelet。

备注:除了上述三个组件,其他组件都是以容器镜像的方式存在,并以容器的方式部署的,因此是可以先通过dock pull手工的方式下载到本地,否则的话,kubeadm init会主动远程下载。

(3)检查kubelet的状态

$ systemctl status kubelet

如果是在master上安装kubelet,则此时的状态处于没有ready状态。

5.2 google_containers 配置(可选)

由于coredns改名为coredns/coredns了,所以在kubernetes init之前输入以下命令。

$ docker pull coredns/coredns:latest
$ docker tag coredns/coredns:latest registry.aliyuncs.com/google_containers/coredns:latest

DNS的目的是通过域名字来访问主机。

5.3 kubeadm init创建leader mananger节点

(1)复位

# 如果初始化过程出现问题,使用如下命令重置
$ kubeadm reset
$ rm -rf /var/lib/cni/
$ rm -f $HOME/.kube/config
$ systemctl daemon-reload && systemctl restart kubelet

(2)命令

# 确保通过名字可以访问master主节点
$ ping cluster-endpoint

kubeadm init --apiserver-advertise-address 172.24.130.172 --control-plane-endpoint cluster-endpoint  --image-repository registry.aliyuncs.com/google_containers --service-cidr 10.1.0.0/16 --pod-network-cidr 192.168.0.0/16

(3)输出

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

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

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

You can now join any number of control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root:

  kubeadm join cluster-endpoint:6443 --token ywv88r.v66vfltjx71o1m78 \
        --discovery-token-ca-cert-hash sha256:0960bd69ebf10fbfeba8b630cc827c7345558a5ae24e110cf125930440805f9f \
        --control-plane 

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join cluster-endpoint:6443 --token ywv88r.v66vfltjx71o1m78 \
        --discovery-token-ca-cert-hash sha256:0960bd69ebf10fbfeba8b630cc827c7345558a5ae24e110cf125930440805f9f 

从上面可以看出:

作为control plane节点的方式加入集群的两种方法:

kubeadm join cluster-endpoint:6443 --token ywv88r.v66vfltjx71o1m78 \
        --discovery-token-ca-cert-hash sha256:0960bd69ebf10fbfeba8b630cc827c7345558a5ae24e110cf125930440805f9f \
        --control-plane 

作为普通节点的方式加入集群的方法:

kubeadm join cluster-endpoint:6443 --token ywv88r.v66vfltjx71o1m78 \
        --discovery-token-ca-cert-hash sha256:0960bd69ebf10fbfeba8b630cc827c7345558a5ae24e110cf125930440805f9f 

(3)查看节点情况

[root@k8s-master1 ~]# kubectl get nodes

NAME          STATUS   ROLES                  AGE   VERSION
k8s-master1   Ready    control-plane,master   19h   v1.23.3

第六步:kubeadm init后处理: 创建kube配置文件

根据初始化的输出结果提示,进一步处理如下。

6.1 修改配置文件

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

6.2  安装第三方网络插件

Installing Addons | Kubernetes

网络插件的目的是把k8s网络虚拟出一个网络,对外提供统一的接口,对内实现负载均衡和网络策略管理。

K8S支持多种网络策略,根据自己的需要选择一个,以calico插件为例

# 下载配置文件
curl https://docs.projectcalico.org/manifests/calico.yaml -O

# 根据配置文件进行安装
$ kubectl apply -f calico.yaml

6.3  检查节点的安装情形

(1)查看组件部署情况

$ docker images

[root@k8s-master1 ~]# docker images
REPOSITORY                                                        TAG       IMAGE ID       CREATED         SIZE
kubernetesui/dashboard                                            v2.5.0    57446aa2002e   21 hours ago    223MB
calico/kube-controllers                                           v3.22.0   df76d42861ee   5 days ago      132MB
calico/cni                                                        v3.22.0   f86797de8afd   5 days ago      235MB
calico/pod2daemon-flexvol                                         v3.22.0   59daef946c8c   5 days ago      21.4MB
calico/node                                                       v3.22.0   f109b1742d34   5 days ago      213MB
registry.aliyuncs.com/google_containers/kube-apiserver            v1.23.3   f40be0088a83   9 days ago      135MB
registry.aliyuncs.com/google_containers/kube-scheduler            v1.23.3   99a3486be4f2   9 days ago      53.5MB
registry.aliyuncs.com/google_containers/kube-controller-manager   v1.23.3   b07520cd7ab7   9 days ago      125MB
registry.aliyuncs.com/google_containers/kube-proxy                v1.23.3   9b7cc9982109   9 days ago      112MB
registry.aliyuncs.com/google_containers/kube-apiserver            v1.23.0   e6bf5ddd4098   8 weeks ago     135MB
registry.aliyuncs.com/google_containers/kube-proxy                v1.23.0   e03484a90585   8 weeks ago     112MB
registry.aliyuncs.com/google_containers/kube-controller-manager   v1.23.0   37c6aeb3663b   8 weeks ago     125MB
registry.aliyuncs.com/google_containers/kube-scheduler            v1.23.0   56c5af1d00b5   8 weeks ago     53.5MB
registry.aliyuncs.com/google_containers/etcd                      3.5.1-0   25f8c7f3da61   3 months ago    293MB
coredns/coredns                                                   latest    a4ca41631cc7   4 months ago    46.8MB
registry.aliyuncs.com/google_containers/coredns                   latest    a4ca41631cc7   4 months ago    46.8MB
registry.aliyuncs.com/google_containers/coredns                   v1.8.6    a4ca41631cc7   4 months ago    46.8MB
registry.aliyuncs.com/google_containers/pause                     3.6       6270bb605e12   5 months ago    683kB
kubernetesui/metrics-scraper                                      v1.0.7    7801cfc6d5c0   7 months ago    34.4MB
calico/node                                                       v3.8.9    ee86d6374c0e   20 months ago   190MB
calico/pod2daemon-flexvol                                         v3.8.9    c3fc7e2b20f8   20 months ago   9.37MB
calico/cni                                                        v3.8.9    ab4bfb784a04   20 months ago   161MB
$ docker ps

[root@k8s-master1 ~]# docker ps
CONTAINER ID   IMAGE                                               COMMAND                  CREATED       STATUS       PORTS     NAMES
50c72aebaa12   kubernetesui/dashboard                              "/dashboard --insecu鈥   2 hours ago   Up 2 hours             k8s_kubernetes-dashboard_kubernetes-dashboard-546cbc58cd-c55gt_kubernetes-dashboard_c4bbfd43-fd5a-4577-822f-dd762ead45d7_1
9be049fc07f2   7801cfc6d5c0                                        "/metrics-sidecar"       2 hours ago   Up 2 hours             k8s_dashboard-metrics-scraper_dashboard-metrics-scraper-799d786dbf-dkm47_kubernetes-dashboard_cd386835-f902-42bf-8032-178e2185f0d2_1
31d79f2f6062   registry.aliyuncs.com/google_containers/pause:3.6   "/pause"                 2 hours ago   Up 2 hours             k8s_POD_dashboard-metrics-scraper-799d786dbf-dkm47_kubernetes-dashboard_cd386835-f902-42bf-8032-178e2185f0d2_2
245140693ea8   a4ca41631cc7                                        "/coredns -conf /etc鈥   2 hours ago   Up 2 hours             k8s_coredns_coredns-6d8c4cb4d-rxjh9_kube-system_bd934648-b339-422c-8d54-9498eeffd779_2
f9d212219f0d   registry.aliyuncs.com/google_containers/pause:3.6   "/pause"                 2 hours ago   Up 2 hours             k8s_POD_coredns-6d8c4cb4d-rxjh9_kube-system_bd934648-b339-422c-8d54-9498eeffd779_3
2226f35ec84a   registry.aliyuncs.com/google_containers/pause:3.6   "/pause"                 2 hours ago   Up 2 hours             k8s_POD_kubernetes-dashboard-546cbc58cd-c55gt_kubernetes-dashboard_c4bbfd43-fd5a-4577-822f-dd762ead45d7_2
4cec84eb3f60   a4ca41631cc7                                        "/coredns -conf /etc鈥   2 hours ago   Up 2 hours             k8s_coredns_coredns-6d8c4cb4d-mcjv8_kube-system_0063b61b-665e-4d78-963a-589d0803a1cd_2
e9bf3939136f   registry.aliyuncs.com/google_containers/pause:3.6   "/pause"                 2 hours ago   Up 2 hours             k8s_POD_coredns-6d8c4cb4d-mcjv8_kube-system_0063b61b-665e-4d78-963a-589d0803a1cd_3
1aba8d3d08b4   df76d42861ee                                        "/usr/bin/kube-contr鈥   2 hours ago   Up 2 hours             k8s_calico-kube-controllers_calico-kube-controllers-566dc76669-2pkhv_kube-system_c73d1b6c-87ff-4a24-9dc7-7bb4bbf07974_2
0e28c90b846f   registry.aliyuncs.com/google_containers/pause:3.6   "/pause"                 2 hours ago   Up 2 hours             k8s_POD_calico-kube-controllers-566dc76669-2pkhv_kube-system_c73d1b6c-87ff-4a24-9dc7-7bb4bbf07974_3
91f095f298fc   f109b1742d34                                        "start_runit"            2 hours ago   Up 2 hours             k8s_calico-node_calico-node-cc8sp_kube-system_cdd6318b-3294-4cb8-8c89-73b195ff6be2_2
40f3b32fd608   9b7cc9982109                                        "/usr/local/bin/kube鈥   2 hours ago   Up 2 hours             k8s_kube-proxy_kube-proxy-9z2bm_kube-system_0ba93fb4-84f9-4ad6-875e-038ce92423af_2
e19b019440b4   registry.aliyuncs.com/google_containers/pause:3.6   "/pause"                 2 hours ago   Up 2 hours             k8s_POD_kube-proxy-9z2bm_kube-system_0ba93fb4-84f9-4ad6-875e-038ce92423af_2
29c1049c94f6   registry.aliyuncs.com/google_containers/pause:3.6   "/pause"                 2 hours ago   Up 2 hours             k8s_POD_calico-node-cc8sp_kube-system_cdd6318b-3294-4cb8-8c89-73b195ff6be2_2
b31b5b9ccb11   f40be0088a83                                        "kube-apiserver --ad鈥   2 hours ago   Up 2 hours             k8s_kube-apiserver_kube-apiserver-k8s-master1_kube-system_d27f2ab65f6952657233a6ae00cbce0a_6
2c47614454b5   b07520cd7ab7                                        "kube-controller-man鈥   2 hours ago   Up 2 hours             k8s_kube-controller-manager_kube-controller-manager-k8s-master1_kube-system_f750c0e63deed088ac51fe880b38e1f4_4
5ce3dff0fafd   99a3486be4f2                                        "kube-scheduler --au鈥   2 hours ago   Up 2 hours             k8s_kube-scheduler_kube-scheduler-k8s-master1_kube-system_0969a4e217156cc73dc6871a8d553e2b_6
08855ff00204   25f8c7f3da61                                        "etcd --advertise-cl鈥   2 hours ago   Up 2 hours             k8s_etcd_etcd-k8s-master1_kube-system_4ec6d8e85dd87c17347b8e69a6b9d597_7
83045d940224   registry.aliyuncs.com/google_containers/pause:3.6   "/pause"                 2 hours ago   Up 2 hours             k8s_POD_kube-apiserver-k8s-master1_kube-system_d27f2ab65f6952657233a6ae00cbce0a_2
e0d967f87f46   registry.aliyuncs.com/google_containers/pause:3.6   "/pause"                 2 hours ago   Up 2 hours             k8s_POD_kube-controller-manager-k8s-master1_kube-system_f750c0e63deed088ac51fe880b38e1f4_2
fef32d3cb851   registry.aliyuncs.com/google_containers/pause:3.6   "/pause"                 2 hours ago   Up 2 hours             k8s_POD_kube-scheduler-k8s-master1_kube-system_0969a4e217156cc73dc6871a8d553e2b_2
e53ca7115a40   registry.aliyuncs.com/google_containers/pause:3.6   "/pause"                 2 hours ago   Up 2 hours             k8s_POD_etcd-k8s-master1_kube-system_4ec6d8e85dd87c17347b8e69a6b9d597_2
[root@k8s-master1 ~]# 

(2)在master节点查看集群的节点情况

# 查看集群中的节点
$ kubectl get nodes
[root@k8s-master1 ~]#  kubectl get nodes
NAME          STATUS   ROLES                  AGE   VERSION
k8s-master1   Ready    control-plane,master   20h   v1.23.3

# 查看集群中的服务
$ kubectl get pods -A

# 周期性查看
$ watch -n 1 kubectl get pods -A


作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/122759250

标签:24,ago,kube,k8s,com,hours,docker,K8S,安装
来源: https://blog.csdn.net/HiWangWenBing/article/details/122759250