kubeadm 搭建 Kubernetes 集群

使用 kubeadm 搭建 Kubernetes 集群

公众号 : 倔强小狮子

kubeadm 搭建 Kubernetes 集群


文章目录

1. Kubeadm方式搭建K8S集群概要

  1. 准备三台虚拟机,同时安装操作系统CentOS 7.x
  2. 虚拟机或云服务器在条件允许的情况下尽量制作快照
  3. 对三个安装之后的操作系统进行初始化操作
  4. 在三个节点安装 docker kubelet kubeadm kubectl
  5. 在master节点执行kubeadm init命令初始化
  6. 在node节点上执行 kubeadm join命令,把node节点添加到当前集群
  7. 配置CNI网络插件,用于节点之间的连通【*】
  8. 通过拉取一个nginx进行测试,能否进行外网测试
  9. 步骤 14 存在错误解决步骤

2. 安装要求

  1. 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多【注意master需要两核】
  2. 可以访问外网,需要拉取镜像,如果服务器不能上网,需要提前下载镜像并导入节点
  3. 禁止swap分区

3. 准备环境

角色 IP
k8s-master 192.168.232.130
k8s-node-2 192.168.232.129
k8s-node-1 192.168.232.128

4. 初始化系统

4.1. ip addr 无 IP

  • 使用 ip addr 查看服务器是否存在 外网 IP, 如果不存在
  • 使用 vi /etc/sysconfig/network-scripts/ifcfg-ens33 修改 该文件 ONBOOT=no 至 yes , 然后 wq 保存退出(或 wq! )
    kubeadm 搭建 Kubernetes 集群

4.2. 修改 各服务器的 设置主机名

  • hostnamectl set-hostname <hostname>
    

4.3. 关闭防火墙(保证安全情况下[生产注意])

  • systemctl stop firewalld
    

4.4. 永久关闭防火墙(可选)

  • systemctl disable firewalld
    
    kubeadm 搭建 Kubernetes 集群

4.5. 关闭selinux

  • 永久关闭
     sed -i 's/enforcing/disabled/' /etc/selinux/config  
     
    临时关闭
     setenforce 0  
    
    请注意:通过运行命令 setenforce 0 和 sed ... 将 SELinux 设置为 permissive 模式 可以有效地将其禁用。 这是允许容器访问主机文件系统所必需的,而这些操作时为了例如 Pod 网络工作正常。 官方链接
    kubeadm 搭建 Kubernetes 集群

4.6. 关闭swap

  •  临时
    swapoff -a 
     永久关闭
    sed -ri 's/.*swap.*/#&/' /etc/fstab
    

    kubeadm 搭建 Kubernetes 集群

4.7. 将桥接的IPv4流量传递到iptables的链(重要)

  • cat > /etc/sysctl.d/k8s.conf << EOF
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    EOF
    设置生效 
    sysctl --system  
    
    kubeadm 搭建 Kubernetes 集群

4.8 确保每个节点上 MAC 地址和 product_uuid 的唯一性

使用命令 ip link 或 ifconfig -a 来获取网络接口的 MAC 地址,可以使用 
sudo cat /sys/class/dmi/id/product_uuid 命令对 product_uuid 校验,一般来讲,
硬件设备会拥有唯一的地址,但是有些虚拟机的地址可能会重复。 
Kubernetes 使用这些值来唯一确定集群中的节点。 如果这些值在每个节点上不唯一,可能会导致安装 失败。

检查网络适配器

4. 9. 时间同步,久一点 (可选)

  • yum install ntpdate -y
    ntpdate time.windows.com
    
    kubeadm 搭建 Kubernetes 集群

5. 安装Docker

5. 1. 首先配置一下Docker的阿里yum源

cat >/etc/yum.repos.d/docker.repo<<EOF
[docker-ce-edge]
name=Docker CE Edge - \$basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/\$basearch/edge
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
EOF

5.2. 然后yum方式安装docker

  • # yum安装
    yum -y install docker-ce
    
    kubeadm 搭建 Kubernetes 集群

5.3. 查看 docker 版本( 校验 安装成功 )

kubeadm 搭建 Kubernetes 集群

5.4. 启动 docker (会生成一些 docker本身配置文件)

  • systemctl enable docker
    systemctl start docker
    

5.5. 配置 docker 镜像源 (阿里镜像源速度块)

  • cat >> /etc/docker/daemon.json << EOF
    {
      "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
    }
    EOF
    
    #  重启 docker 
    systemctl restart docker
    

5.6. 校验 docker 镜像源配置完成

kubeadm 搭建 Kubernetes 集群

6. 校验以下 port 不被占用

6.1 Control-plane nodes (master 节点)

协议 方向 端口范围 作用 使用者
TCP 入站 6443* Kubernetes API 服务器 所有组件
TCP 入站 2379-2380 etcd 服务器客户端 API kube-apiserver, etcd
TCP 入站 10250 Kubelet API kubelet 自身、控制平面组件
TCP 入站 10251 kube-scheduler kube-scheduler 自身
TCP 入站 10252 kube-controller-manager kube-controller-manager 自身

6.2 Worker nodes (工作节点)

协议 方向 端口范围 作用 使用者
TCP 入站 10250 Kubelet API kubelet 自身、控制平面组件
TCP 入站 30000-32767 NodePort 服务 所有组件

注意 : 使用 * 标记的端口可以被占用, 其余需验证开放状态

7. 添加kubernetes软件源

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

8. 安装kubeadm,kubelet和kube在这里插入代码片ctl

方式(一) 安装kubelet、kubeadm、kubectl 未指定版本 `建议使用方式二
具体查看 XX 搭建错误`
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

方式(二)安装kubelet、kubeadm、kubectl,同时指定版本 `避开 XX. 搭建错误`
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0

kubeadm 搭建 Kubernetes 集群

9. 设置开机启动

systemctl enable --now kubelet

![在这里插入图片描述](https://www.icode9.com/i/ll/?i=706b4162c0a64056b38845e5e718a032.pngkubeadm 搭建 Kubernetes 集群

10 . 查看安装版本

kubectl version 

kubeadm 搭建 Kubernetes 集群

11. 部署Kubernetes Master 【master节点】

注意 : 只在 master 节点执行, 只在 master 节点执行, 只在 master 节点执行, 重要的事情说三遍

kubeadm init --apiserver-advertise-address=192.168.232.130 \
 --image-repository registry.aliyuncs.com/google_containers \
 --kubernetes-version v1.18.0 --service-cidr=10.96.0.0/12 \
 --pod-network-cidr=10.244.0.0/16
  • –apiserver-advertise-address : Control-plane 地址 (master 节点地址)
  • –image-repository : k8s 镜像源 (阿里云镜像源)
  • –kubernetes-version : 安装版本
  • 其他两个是 集群交互地址

11.1 pull images

kubeadm 搭建 Kubernetes 集群

11.2 pull image 进行中查看

另外打开 master 节点一个窗口 docker images
kubeadm 搭建 Kubernetes 集群

12. 搭建成功

12.1 搭建展示

kubeadm 搭建 Kubernetes 集群

  1. 红色框中容易卡住, 首先排查 kubectl, kubiadm 是否安装成功, 校验服务器可以上网
  2. 需在 master 节点执行 蓝色框中代码
  3. 黄色框中代表 node节点执行加入 master节点

12.2 node 加入集群

# kubeadm init 成功后提示信息中可获取 
kubeadm join 192.168.186.136:6443 --token z5n06u.rg7hvmxpsx15nfot     --discovery-token-ca-cert-hash sha256:0c2775e3c5f45be1d60cca3de27bcbcd2b65a491072a2f5f9b497aea3582fd28

kubeadm 搭建 Kubernetes 集群

12.2 查看 集群状态

kubectl get node

kubeadm 搭建 Kubernetes 集群

  1. NotReady : 准备就绪状态

12.3 部署CNI网络插件

# 添加
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

kubeadm 搭建 Kubernetes 集群

13. 测试集群

  1. 在Kubernetes集群中创建一个pod,验证是否正常运行
    # 下载nginx 会联网 pull nginx image
    kubectl create deployment nginx --image=nginx
    # 查看状态
    kubectl get pod
    # 暴露端口
    kubectl expose deployment nginx --port=80 --type=NodePort
    # 查看一下对外的端口
    kubectl get pod,svc
    
    
    kubeadm 搭建 Kubernetes 集群
    kubeadm 搭建 Kubernetes 集群

14. 搭建错误 (建议错误后,除 CPU不足外,建议恢复快照重新安装)

1. 错误

error: Missing or incomplete configuration info. Please point to an existing, complete config file:

  1. Via the command-line flag --kubeconfig
  2. Via the KUBECONFIG environment variable
  3. In your home directory as ~/.kube/config

To view or setup config directly use the ‘config’ command.

解决 :

	vim /etc/profile
	新增一行
	export KUBERNETES_MASTER="127.0.0.1:8080"
	保存退出
	source /etc/profile
	刷新环境变量

2. 错误

[preflight] You can also perform this action in beforehand using ‘kubeadm config images pull’
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR ImagePull]: failed to pull image registry.aliyuncs.com/google_containers/coredns:v1.8.0: output: Error response from daemon: manifest for registry.aliyuncs.com/google_containers/coredns:v1.8.0 not found: manifest unknown: manifest unknown
, error: exit status 1
[preflight] If you know what you are doing, you can make a check non-fatal with --ignore-preflight-errors=...
To see the stack trace of this error execute with --v=5 or higher
在阿里云镜像中未找到 当前 安装版本, 只发现 1.8 版本

解决 : 卸载 kubectl , kubeadm, kubernetes-cni

kubeadm reset
 
yum erase -y kubelet kubectl kubeadm kubernetes-cni

# kubeadm init pull images 全部删除干净
docker rmi -f registry.aliyuncs.com/google_containers/kube-apiserver  (IMAGE ID )   
docker rmi -f  registry.aliyuncs.com/google_containers/kube-scheduler (IMAGE ID )     
docker rmi -f registry.aliyuncs.com/google_containers/kube-proxy  (IMAGE ID )      
docker rmi -f registry.aliyuncs.com/google_containers/kube-controller-manager  (IMAGE ID )
docker rmi -f registry.aliyuncs.com/google_containers/pause  (IMAGE ID )                 
docker rmi -f registry.aliyuncs.com/google_containers/etcd   (IMAGE ID ) 

docker images    

IMAGE ID (如下图黄色)
kubeadm 搭建 Kubernetes 集群

3. 错误

  1. kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    The connection to the server raw.githubusercontent.com was refused - did you specify the right host or port?

  2. 上诉 地址被墙, 需要*解决, 也可以进行修改 hosts文件解决

  3. 域名ip查询链接链接:http://ip.tool.chinaz.com/
    kubeadm 搭建 Kubernetes 集群

  4. 获得下面任意 IP, 修改 hosts 文件

    cat >> /etc/hosts << EOF
    185.199.109.133  raw.githubusercontent.com
    EOF
    

    kubeadm 搭建 Kubernetes 集群

  5. 网络不通 多尝试
    尝试 九十一次后如果再不通, 无缘了
    kubeadm 搭建 Kubernetes 集群

4. 错误

kubeadm 搭建 Kubernetes 集群

  1. 导致 master kubectl get node -> NotReady 状态,因为 flannel 没有安装成功, 出现 NotReady 的节点, 在该节点执行docker images 后与其他正常节点对比, 查看缺少的 image 进行 docker pull
    例如 : docker pull quay.io/coreos/flannel:v0.14.0

  2. 完整的 image
    kubeadm 搭建 Kubernetes 集群

期待你的关注,和我一起学习
转载说明:转载携带原文链接

上一篇:K8S--服务集群搭建


下一篇:CentOS7 kubeadm 搭建 K8S 1.20.5 (containerd 容器运行时)