利用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集群做个验收评估。

相关推荐
Elastic 中国社区官方博客6 小时前
Elasticsearch Open Inference API 增加了对 Jina AI 嵌入和 Rerank 模型的支持
大数据·人工智能·elasticsearch·搜索引擎·ai·全文检索·jina
隔壁老王1566 小时前
mysql实时同步到es
数据库·mysql·elasticsearch
努力的小T6 小时前
使用 Docker 部署 Apache Spark 集群教程
linux·运维·服务器·docker·容器·spark·云计算
SunnyRivers8 小时前
关于ES中text类型时间字段范围查询的结构化解决方案
elasticsearch·时间·text·范围查询
东风微鸣8 小时前
TTRSS 迁移实战
docker·云原生·kubernetes·可观察性
API_technology8 小时前
电商搜索API的Elasticsearch优化策略
大数据·elasticsearch·搜索引擎
转身後 默落10 小时前
04.Docker 镜像命令
docker·容器·eureka
IT_张三10 小时前
Docker+Kubernetes_第一章_Docker入门
java·docker·kubernetes
企鹅侠客11 小时前
kube-proxy怎么修改ipvs规则?
云原生·kubernetes·kubelet
仇辉攻防11 小时前
【云安全】云原生- K8S 污点横移
web安全·网络安全·云原生·容器·kubernetes·k8s·安全威胁分析