【Kubernetes---Ansible部署方案】

本博客内容参考:1

《Linux学习-Kubernetes学习之kubernetes安装部署(一)》
《Kubernetes官网》
B站Up主: 火星小刘《20分钟搭建kubernetes 1.24.1 - 全网最简捷高效的方式》
B站Up主: 貔貅云原生 《k8s 部署工具 kubez-ansible 的代码分析》
说明: 在实际安装过程当中请根据需要修改参数, 自 1.24 版起,Dockershim 已从 Kubernetes 项目中移除,原因不兼容CRI接口

1 主机组清单

私网ip节点名称主机名称
172.19.139.231master-nodewww.example1.com
172.19.139.230secondary-nodewww.example2.com
172.19.139.229secondary-nodewww.example3.com

阿里云云服务器性能参数展示:
在这里插入图片描述

2 检查事项

2.1 检查yum源

博主测试使用的是阿里云服务器,Operation System是Alibaba Cloud Linux (Aliyun Linux) 2.1903 LTS (Hunting Beagle),在检查事项的末尾有最终的检查ansible剧本DEMO

更新完kubernetes.repo记得要yum makecache,刷新yum源缓存

[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

下列为Ansible剧本代码DEMO:

---
- name: ---检查yum源仓库和操作系统信息---
  hosts: all  # 将your_target_host替换为您的目标主机名称或IP地址
  gather_facts: false  # 可选,如果您不需要收集主机信息,可以设置为false

  tasks:
    - name: ---列出已启用的yum仓库---
      command: yum repolist enabled
      register: yum_all_repolist

    - name: 使用正则过滤出Kubernetes信息
      set_fact:
        kubernetes_repolist: "{{ yum_all_repolist.stdout | regex_findall('kubernetes', multiline=true) }}"
        
    - name: Kubernetes_yum仓库信息如下
      debug:
        var: kubernetes_repolist

    - name: ---获取操作系统信息---
      command: cat /etc/os-release
      register: os_release_info

    - name: 操作系统信息如下
      debug:
        var: os_release_info.stdout_lines

2.2 检查防火墙以及Selinux

云主机的防火墙若为开启状态需要添加放行白名单,不然也会报错
在这里插入图片描述

2.3 检查云主机的VCPU

云主机的VCPU至少为2颗
在部署的过程当中,若低于2颗将会在安装kubelet的时候提示异常

在这里插入图片描述

2.4 检查云主机的云盘容量

云主机的云盘容量至少40G
Ansible剧本检查云盘以及docker运行状态的DEMO:

---
- name: 开始前置检查步骤
  hosts: all  # 将your_target_host替换为您的目标主机名称或IP地址
  gather_facts: true  # 可选,如果您不需要收集主机信息,可以设置为false

  tasks:
    - name: 第一步:使用"systemctl"检查Containerd的运行状态
      command: systemctl is-active containerd
      register: containerd_status

    - name: Containerd的运行状态
      debug:
        var: containerd_status.stdout

    - name: 第二步:使用"df -h"命令检查磁盘使用情况
      command: df -h
      register: df_output

    - name: 磁盘的情况
      debug:
        var: df_output.stdout_lines

    - name: 第三步:使用"cat /proc/cpuinfo"命令检查cpu核数
      command: cat /proc/cpuinfo
      register: cpuinfo_output

    - name: 计算CPU数量
      set_fact:
        cpu_count: "{{ cpuinfo_output.stdout_lines | select('match', '^processor') | list | length }}"

    - name: CPU核数
      debug:
        var: cpu_count

在这里插入图片描述

这边附上检查DEMO

---
- name: 开始前置检查步骤
  hosts: all
  gather_facts: true
  become: yes

  tasks:
    - name: 第一步:使用"systemctl"检查Docker的运行状态
      command: systemctl is-active docker
      register: docker_status

    - name: Docker的运行状态
      debug:
        var: docker_status.stdout

    - name: 第二步:使用"df -h"命令检查磁盘使用情况
      command: df -h
      register: df_output

    - name: ---磁盘的情况---
      debug:
        var: df_output.stdout_lines

    - name: 第三步:使用"cat /proc/cpuinfo"命令检查cpu核数
      command: cat /proc/cpuinfo
      register: cpuinfo_output

    - name: ---计算CPU数量---
      set_fact:
        cpu_count: "{{ cpuinfo_output.stdout_lines | select('match', '^processor') | list | length }}"

    - name: CPU核数
      debug:
        var: cpu_count

    - name: 第四步:检查Selinux状态
      command: sestatus
      register: selinux_status

    - name: ---Slinux状态---
      debug:
        var: selinux_status.stdout_lines

    - name: 第五步:检查yum仓库
      command: yum repolist enabled
      register: yum_all_repolist

    - name: 使用正则过滤出Kubernetes信息
      set_fact:
        kubernetes_repolist: "{{ yum_all_repolist.stdout | regex_findall('kubernetes', multiline=true) }}"
        
    - name: ---Kubernetes_yum仓库信息如下---
      debug:
        var: kubernetes_repolist

    - name: 第六步:检查云实例操作系统
      command: cat /etc/os-release
      register: os_release_info

    - name: ---操作系统信息如下---
      debug:
        var: os_release_info.stdout_lines

    - name: 第七步:检查防火墙状态
      command: firewall-cmd --state
      register: firewall_status

    - name: ---防火墙状态---
      debug:
        var: firewall_status.stdout

    - name: 关闭防火墙
      firewalld:
        state: disabled
      when: "'enabled' in firewall_status.stdout and firewall_status.stdout.enabled"

运行部分效果图:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3 安装continerd以及其他插件的指令行

在这里博主不展开描述了,因为官方文档写的真的很详细,感兴趣的可以自己去看一下,理解了部署过程以及原理就一定能装上,图省事的话,建议可以做成脚本
在这里插入图片描述
在这里插入图片描述
安装contained的步骤:

  1. github containerd下载链接
    下载对应版本的containerd安装压缩包

  2. 使用sha256sum文件进行校验

  3. 切换至/usr/local路径下

  4. 使用tar指令解压tar包

  5. 切换至/usr/local/lib,判断是否存在systemd/system/,并下载contained.service单元文件 https://raw.githubusercontent.com/containerd/containerd/main/containerd.service

  6. systemctl daemon-reload && systemctl enable --now containerd

  7. 下载runc.amd64文件从https://github.com/opencontainers/runc/releases,路径在/usr/local/sbin/runc
    mkdir -p /usr/local/sbin/runc
    wget https://github.com/opencontainers/runc/releases/download/v1.1.9/runc.amd64
    cd /usr/local/sbin
    install -m 755 runc.amd64 /usr/local/sbin/runc

  8. 安装CNI插件 链接: https://github.com/containernetworking/plugins/releases
    创建存放路径:
    mkdir -p /opt/cni/bin/
    tar Cxzvf /opt/cni/bin/ cni-plugins-linux-amd64-v1.3.0.tgz
    #创建文件路径,不存在该路径
    mkdir /etc/containerd
    #生成默认配置文件
    containerd config default > /etc/containerd/config.toml

4 开始安装Kubernetes组件

4.1 检查白名单以及权重

前置步骤还需要检查放行端口
博主的网络规划思路是:

protocol规划:
https http优先原则 1~10
ssh  10~20
其他 20~100


# 做主机映射并且配置各个主机成员组件的免密登录

172.19.139.229   secondary-node2.cn    secondary-node2.cn 
172.19.139.230  secondary-node1.cn   secondary-node1.cn 
172.19.139.231  master-node     master-node

入站信息

master-node:

172.19.139.231/32 6443 
172.19.139.231/32 2379/2380
172.19.139.231/32 10250/10250
172.19.139.231/32 10259/10259
172.19.139.231/32 10257/10257

secondary-node:

172.19.139.230/32 10250/10250
172.19.139.229/32  10250/10250
172.19.139.230/32  30000/32767
172.19.139.229/32  30000/32767

4.2 登录ACR并开启ip-forwarding

登录私有docker镜像仓库这步切记不能忘记
在这里插入图片描述
其次,要把ip-forwarding功能开启,在终端的指令为

sudo sysctl -w net.bridge.bridge-nf-call-iptables=1 && sudo sysctl -w net.bridge.bridge-nf-call-ip6tables=1

在这里插入图片描述

Ansible剧本DEMO:

---
- name: 部署Kubernetes-Cluster
  hosts: all
  become: yes

  tasks:
    - name: 关闭Swap分区
      shell: swapoff -a && sed -i '/ swap / s/^\\(.*\\)$/\\#\\1/g' /etc/fstab

    - name: 安装三件套kubeadm,kubelet,kubectl
      yum:
        name: ['kubelet', 'kubeadm', 'kubectl']
        state: present

    - name: 使用systemctl开启kubelet
      command: systemctl enable kubelet

    - name: 开启iptables forwarding功能
      command: sysctl -w net.bridge.bridge-nf-call-iptables=1 && sysctl -w net.bridge.bridge-nf-call-ip6tables=1

    # - name: 初始化master节点
    #   command: kubeadm init --apiserver-advertise-address=172.19.139.231 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.22.3 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16

    # - name: 设置kubeconfig为当前用户
    #   command: "{{ item }}"
    #   loop:
    #     - mkdir -p $HOME/.kube
    #     - cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    #     - chown $(id -u):$(id -g) $HOME/.kube/config

    # - name: 安装pod network
    #   command: kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

    # - name: 安装Kubernetes Dashboard
    #   command: kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml

  handlers:
    - name: 安装完毕重新启动
      command: systemctl reboot

运行完该剧本,使用deployment_kuber_node.py,安装配置接下来的内容
包括第4章节里面所有的步骤,这里默认服务器能访问外网

5 错误复盘

在这里插入图片描述
在这里插入图片描述
在安装过程当中,会有这个报错,博主绕了很久也没找到原因,但直觉告诉问题出在这个文件里/etc/containers/storage.conf 找到对应的报错点,键值异常

根据报错的内容把相应键注释掉,因为默认的键值不是安装sealos的安装方式读到到的
Failed to decode the keys [\\\"storage.options.override_kernel_check\\\"] from \\\"/etc/containers/storage.conf\\\"\"/run/containerd/containerd.sock". Please update your configuration!

还有实际安装的时候,建议卸载docker,因为最终会使用到的是containerd
需要对内核参数进行修改,由于博主使用的是阿里云的镜像,阿里云操作系统的内核文档参考链接如下:
aliyun linux kernel文档链接

    print("                           .__.__  \n"
          " ___  __ ___________  ____ |__|  |  \n"
          " \  \/ // __ \_  __ \/ ___\|  |  |  \n"
          "  \   /\  ___/|  | \/ /_/  >  |  |__ \n"
          "   \_/  \___  >__|  \___  /|__|____/ \n"
          "            \/     /_____/           \n")

6 大功告成

正式开始折腾环境了~
在这里我的个人建议直接使用脚本方式安装是最快的,可以使用sealos这个去安装配置k8s效率非常高,但是也要做前期的检查工作,用二进制安装方式是效率最慢
在这里插入图片描述


  1. 注脚的解释 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值