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-master192.168.232.130
k8s-node-2192.168.232.129
k8s-node-1192.168.232.128

4. 初始化系统

4.1. ip addr 无 IP

  • 使用 ip addr 查看服务器是否存在 外网 IP, 如果不存在
  • 使用 vi /etc/sysconfig/network-scripts/ifcfg-ens33 修改 该文件 ONBOOT=no 至 yes , 然后 wq 保存退出(或 wq! )
    在这里插入图片描述

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

  • hostnamectl set-hostname <hostname>
    

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

  • systemctl stop firewalld
    

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

  • systemctl disable firewalld
    
    在这里插入图片描述

4.5. 关闭selinux

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

4.6. 关闭swap

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

    在这里插入图片描述

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  
    
    在这里插入图片描述

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

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

4.9 设置集群 Hosts

cat >> /etc/hosts << EOF
192.168.186.136 k8s-master
192.168.186.137 k8s-node-2
192.168.186.138 k8s-node-1
EOF

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

  • yum install ntpdate -y
    ntpdate time.windows.com
    
    在这里插入图片描述

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
    
    在这里插入图片描述

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

在这里插入图片描述

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 镜像源配置完成

在这里插入图片描述

6. 校验以下 port 不被占用

6.1 Control-plane nodes (master 节点)

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

6.2 Worker nodes (工作节点)

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

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

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

在这里插入图片描述

9. 设置开机启动

systemctl enable --now kubelet

![在这里插入图片描述](https://img-blog.csdnimg.cn/706b4162c0a64056b38845e5e718a032.png在这里插入图片描述

10 . 查看安装版本

kubectl version 

在这里插入图片描述

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

在这里插入图片描述

11.2 pull image 进行中查看

另外打开 master 节点一个窗口 docker images
在这里插入图片描述

12. 搭建成功

12.1 搭建展示

在这里插入图片描述

  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

在这里插入图片描述

12.2 查看 集群状态

kubectl get node

在这里插入图片描述

  1. NotReady : 准备就绪状态

12.3 部署CNI网络插件

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

在这里插入图片描述

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
    
    
    在这里插入图片描述
    在这里插入图片描述

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 (如下图黄色)
在这里插入图片描述

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/
    在这里插入图片描述

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

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

    在这里插入图片描述

  5. 网络不通 多尝试
    尝试 九十一次后如果再不通, 无缘了
    在这里插入图片描述

4. 错误

在这里插入图片描述

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

  2. 完整的 image
    在这里插入图片描述

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值