利用Kubespray安装生产环境的k8s集群-实施篇

如何安装生产环境下的高可用k8s集群

接上篇

规划k8s集群

本次我预备了6台VMs, 1台作为Jump server,用来部署Ansible并负责在其他5台设备上部署k8s。这台服务器后续可能还要做nfs server。

3台做master,为了给etcd做高可用。(Etcd采用RAFT的算法,需要至少3台服务器部署才可以实现高可用);2台做worker,后续再加几台做worker,同时实践下如何用Kubespray做k8s集群的升级和变更。

总结, 1台堡垒机,k8s cluter:3台master,2台worker。

堡垒机安装必要组件

以下安装均以名叫bill的用户进行,非root用户。后续运行ansible到其他服务器也是bill用户,所以需要其他所有服务器也有bill用户,切bill用户可以免密码进行sudo。

不要嫌麻烦就哪里都用root,这不是个好习惯。

bash 复制代码
     sudo apt update
     sudo apt install -y python3-pip sshpass git #安装一些必须插件
     sudo pip install ansible  
     sudo apt install ansible -y  #pip 还是apt安装ansible均可,ansible的版本不能太低,Kubersray安装前会对ansible,python,jinjia等等进行版本检测的。
    git clone https://github.com/kubernetes-sigs/kubespray.git #我看大部分文档在这里会使用 --recurse-submodules 相关git参数,我没用也没出问题。
   # submodules相关git参数,是用来完整下载git项目的独立的以另一个git repo存在的子项目的。
   # 整个kuberspray 就是需要的Kubespray 仓库。具体的目录结构和每个目录的功能,我想有机会的时候单独写一篇。
   cd kubespray/
   pip install -r requirements.txt --break-system-packages # --break-system-packages 这个是我加上去的, 确保kubespray可以安装到必须的版本的package,即使整个版本和系统本身冲突。
   echo $PATH=$PATH:/home/bill/.local/bin #一时不讲究,直接git clone到~目录就装好了。所以加以下$PATH
   
   cd inventory/ # inventory 目录下修改inventory.ini 文件,很重要!让Ansible知道你的k8s的集群服务器结构。
   cp -r inventory/sample inventory/mycluster  # 将sample样本目录cp一个出来,命名为你的clster名字(名字不重要,可不可靠这里的Naming Convention)
   vim inventory.ini # 稍后贴出我修改好的inventory.ini 文件
   # 以下为在Ansible server的bill账户下生成一个ssh证书pair,并设置让其他k8s服务器(Ansible server的被管理服务器或client)
    ssh-keygen -t rsa -b 2048
    ssh-copy-id bill@192.168.4.34
    ssh-copy-id bill@192.168.4.35
    ssh-copy-id bill@192.168.4.36
    ssh-copy-id bill@192.168.4.37
    ssh-copy-id bill@192.168.4.3
    ssh bill@192.168.4.36 # 测试是否可以从Ansible server 免密以相同账号登陆ansible client。 
#以上就完成了最初的准备,接着就可以开始安装了。

inventory.ini

整个文件非常重要,一定要确保配置正确。

bash 复制代码
# 先定义所有的服务器,指明了ansible通过ssh登陆client时使用bill用户, ansible_become=yes 意思是bill用户可以sudo执行命令,为了方便我采用了client上设置bill可以免密码sudo。 你也可以用其他方法来实现。
[all]
master-1 ansible_host=192.168.4.36 ansible_user=bill ansible_become=yes
master-2 ansible_host=192.168.4.34 ansible_user=bill ansible_become=yes
master-3 ansible_host=192.168.4.35 ansible_user=bill ansible_become=yes
worker-1 ansible_host=192.168.4.37 ansible_user=bill ansible_become=yes
worker-2 ansible_host=192.168.4.38 ansible_user=bill ansible_become=yes

[kube_control_plane]
master-1
master-2
master-3


[kube_node]
worker-1
worker-2


[etcd]
master-1
master-2
master-3

[calico_rr]
# 整个后续讲什么是Calico 的 RR
[k8s_cluster:children] 
kube_control_plane
kube_node

安装正式开始

安装确保swapoff和ip_forward等基本配置

既然Ansible已经就绪了,当然是通过Ansible来了,也顺手写个自己的playbook。(现在Chaggpt 已经是相当的牛叉了,我的playbook就是直接说需求让它写的,我一句没改)。

将你写好的playbook 最好放到kubespray的playbooks目录下,和其他kuverspray自己的playbook放一起。

pre_install_k8s.yml

yaml 复制代码
---
- name: Disable Swap and Enable IPv4 Forwarding
  hosts: all
  become: true
  tasks:
    # 禁用 Swap
    - name: Temporarily disable swap
      ansible.builtin.command: swapoff -a

    - name: Ensure swap entries are commented out in /etc/fstab
      ansible.builtin.replace:
        path: /etc/fstab
        regexp: '^([^#].*swap.*)$'
        replace: '# \1'

    - name: Verify swap is disabled
      ansible.builtin.shell: free -h | grep Swap
      register: swap_status

    - debug:
        msg: "Swap status after disabling: {{ swap_status.stdout }}"

    # 启用 IPv4 网络转发
    - name: Temporarily enable IPv4 forwarding
      ansible.builtin.command: sysctl -w net.ipv4.ip_forward=1

    - name: Persistently enable IPv4 forwarding
      ansible.builtin.lineinfile:
        path: /etc/sysctl.conf
        regexp: '^net.ipv4.ip_forward'
        line: 'net.ipv4.ip_forward = 1'
        create: yes

    -

把你写好的playbook 运行起来,顺便排排错,热好身就准备一键安装k8s集群了。

bash 复制代码
ansible-playbook pre_install_k8s.yml -i ../inventory/mycluster/inventory.ini # -i 指定使用特定的inventory文件, 主动加上吧,省得出麻烦。

通过Kubespray 安装Kubernets Cluster

详细看到这里的都是真爱,也相信你已经在上一步执行ansible-palybook时候成功了。接下来要运行ansible来安装整个的kubernets集群,只需要一条命令就可以了。

bash 复制代码
ansible-playbook -i ../inventory/mycluster/inventory.ini cluster.yml # 在playbooks目录下,执行一个名叫cluster.yml的palybook,接下来几十分钟你喝杯咖啡再回来验收就可以了。(理想还是要有的, 万一实现了呢)

这样整个安装就结束了。下一篇我们做个安装排错,看看我们最后安装过程中常见的错误和解决办法;同时我们对装好未修正过的k8s集群做个验收评估。

相关推荐
颜淡慕潇4 小时前
【K8S系列】在 K8S 中使用 Values 文件定制不同环境下的应用配置
云原生·容器·kubernetes·环境配置
旦沐已成舟4 小时前
K8S-Pod的环境变量,重启策略,数据持久化,资源限制
java·docker·kubernetes
github_czy4 小时前
(k8s)k8s部署mysql与redis(无坑版)
redis·容器·kubernetes
来恩100312 小时前
Kubernetes学习指南与资料分享
云原生·容器·kubernetes
encoding-console12 小时前
docker安装consul并启动的详细步骤
docker·容器·consul
m0_7482299913 小时前
从零到上线:Node.js 项目的完整部署流程(包含 Docker 和 CICD)
docker·容器·node.js
小诺大人14 小时前
Docker 安装 elk(elasticsearch、logstash、kibana)、ES安装ik分词器
elk·elasticsearch·docker
_Eden_17 小时前
Docker入门学习
学习·docker·容器
forestsea18 小时前
【Elasticsearch 】 聚合分析:桶聚合
大数据·elasticsearch·搜索引擎