云计算百科
云计算领域专业知识百科平台

SRE AI Agent 开发复盘及小白向教程 (一) 项目环境搭建

先导:

目录

先导:

本期目标:

提前准备:

高亮提示:

一、配置虚拟机

        1. 安装虚拟机

        2. 配置网络及虚拟机参数

​编辑二、Ansible环境的部署及集群SSH免密

1. 网络测试

2. 安装基础包和配置SSH互信

三、 创建Ansible项目文件

        1. 创建Ansible Playbook目录及基本文件:

  2. 创建Ansible角色相关文件

​编辑

3.时钟同步

四、检查并配置k8s


本期目标:

        完成SRE AI Agent虚拟机及k8s基础环境的搭建和配置。

提前准备:

        下载并安装VMworkstation,下载rocky 9.6 linux镜像,下载MobaXterm软件(可选),配置过程中需全程联网,且有包下载,请注意流量消耗。

高亮提示:

        绿色:检查点,你应该保证自己的状态与截图一致。

        橙色:修正配置问题,如果你确认没有该问题,可以跳过

        红色:重要的配置,在后续操作中需要用到,请在配置时记录。

一、配置虚拟机

        1. 安装虚拟机

                1. 在VM主界面点击创建新的虚拟机                  

                2. 选择对应的虚拟机镜像        

 

                3. 设置虚拟机名称和位置

                4. 设置磁盘容量为200GB单文件

                5. 修改虚拟机配置为4核4GB内存

        2. 配置网络及虚拟机参数

                1.重新启动虚拟机后选第一项并回车确认

                2. 选中文就行

                3. 此处有四个未完成配置:

                4. 先配置超级用户(Root Password)填写用户密码,并且打开ssh远程登录(第二个勾选项),在填写完成后点击左上角Done按钮,此处如果密码比较简单,需要按两次按钮以确认。

                5. 再配置一个普通用户,填写用户名和密码(可以跳过)

                6. 选择安装磁盘,勾选唯一的磁盘就行

                7.配置网络:在下方主机名处修改主机名为k8s-node1,并应用,再点击右侧配置按钮  

选ipv4配置,点击Add按钮新增连接,此处的ip应当参照你的计算机设置,点击VM左上角的编辑,选择虚拟网络编辑器,你应该有一个NAT类型的连接,如果没有可以通过添加网络创建,选中此连接点击NAT 设置,查看你的Vmware网络配置

如图,这是我的设置,此处的网关和子网掩码就是下文填写的数值,ip则填写该子网下的任意ip

回到虚拟机内的配置页面,填写数值,如我的配置为192.168.30.11,掩码24,网关192.168.30.2,然后点击Done回到主页面

点击Restart按钮重启虚拟机

二、Ansible环境的部署及集群SSH免密

在开始前,请先安装上面的方式配置三台虚拟机

主机名不同:k8s_node1、k8s_node2、k8s_node3,

Ip不同:我的配置是192.168.30.11,192.168.30.12,192.168.30.13

接下来的操作都在k8s_node1上进行:

1. 网络测试

        1.使用MobaXterm或其他终端软件连接到k8s_node1 ,便于接下来的操作

在主页点击左上角Sessions->new sessions.

        2. 选择SSH,在remote host中输入虚拟机的IP(上文配置的ip,我的是192.168.30.11),点击ok

3.在登录窗口以root用户登录,如果你无法看到此页面,则是前文的ip配置错误,(第一次登录会提示要不要接收密钥,全选是)

4.登录成功如图,如果你输入的root密码被拒绝,则是前文root用户处没有开启ssh连接导致。

5.先测试一下网络配置是否正确,输入

ping 8.8.8.8

应该有返回值,如果没有,则是ip和网关配置有问题,如果没问题按ctrl+c退出ping

关闭机器上的防火墙,方便后续操作(不要像我一样忘记关,后续用两个小时的时间排查)

systemctl disable –now firewalld
setenforce 0

请在此过程中检查三台机器,确认登录过程中ip和主机名一一对应且能ping通

2. 安装基础包和配置SSH互信

        1.输入安装命令并等待,安装ansible核心包和ssh互信包

dnf install -y ansible-core sshpass

安装完毕后,最后一行应该显示    Complete!

        2.配置集群ssh,先输入命令,获取认证密钥对

ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa

再分发密钥,我们尝试通过scp命令复制密钥到各个节点

ssh-copy-id -o StrictHostKeyChecking=no root@k8s-node1

ssh-copy-id -o StrictHostKeyChecking=no root@k8s-node2

ssh-copy-id -o StrictHostKeyChecking=no root@k8s-node3

但是发现不能正常分发到指定主机。

通过ping对应主机发现主机的ip是错误的,如图:

这是因为前文我们虽然配置了主机和对应的ip,却没有为各个主机配置解析,换言之,主机根本不知道每个主机名对应哪个ip,我们输入

vim /etc/hosts

发现vim没有安装,使用命令安装(也可以用vi就不用安装了)

dnf install -y vim

再次使用vim打开/etc/hosts,如图

我们添加对应的解析,并保存退出 (按i进入插入模式,输入完毕后按esc,输入wq保存退出)

完成后再试着分发一遍

注意,互信要在每台机器上都配置一遍

如图分发完毕,可以在其他机器上尝试ssh登录能否成功判断对错

如图,登录过程不需要输入密码即为正常,请记住输入exit返回node1,避免错误

你应该能在每台机器上使用ssh免密登录到每台机器

三、 创建Ansible项目文件

        通过以下命令,创建并切换到ansible的项目目录。

mkdir -p ~/ansible-k8s-deployment

cd ~/ansible-k8s-deployment

        1. 创建Ansible Playbook目录及基本文件:

(1)配置文件 ansible.cfg

[defaults]
inventory = ./inventory
host_key_checking = False
remote_user = root

(2)清单文件 inventory

[masters]
k8s-node1 ansible_host=192.168.30.11

[workers]
k8s-node2 ansible_host=192.168.30.12
k8s-node3 ansible_host=192.168.30.13

[all:vars]
# 在单Master集群需要明确指定Master的IP
# 如果是多Master高可用集群,需要配置VIP
master_ip = 192.168.30.11
# 为K8s Pod网络指定CIDR,Calico网络插件需要
pod_network_cidr = "10.244.0.0/16"

(3)playbook入口文件 deploy-k8s.yml


– name: 1. Configure all nodes with common settings
hosts: all
become: true
roles:
– common

– name: 2. Deploy Kubernetes master node
hosts: masters
become: true
roles:
– master

– name: 3. Deploy Kubernetes worker nodes
hosts: workers
become: true
roles:
– worker

– name: 4. Label worker nodes from master
hosts: masters
become: true
tasks:
– name: Apply worker role label to each worker node
ansible.builtin.command: "kubectl label node {{ item }} node-role.kubernetes.io/worker=worker –overwrite"
loop: "{{ groups['workers'] }}"

  2. 创建Ansible角色相关文件

1.创建每个角色的子目录

mkdir -p roles/{common,master,worker}/tasks

(1)在 roles/common/tasks/main.yml中编写common角色

vim ~/ansible-k8s-deployment/roles/common/tasks/main.yml

示例:


# tasks file for common role
– name: Disable SELinux
ansible.posix.selinux:
state: disabled

– name: Disable Swap
block:
– name: Turn off swap
ansible.builtin.command: swapoff -a
– name: Comment out swap in fstab
ansible.builtin.replace:
path: /etc/fstab
regexp: '^(.*swap.*)$'
replace: '# \\1'
when: ansible_swaptotal_mb > 0

– name: Configure kernel modules and sysctl for Kubernetes
block:
– name: Load overlay module
community.general.modprobe: { name: overlay, state: present }
– name: Load br_netfilter module
community.general.modprobe: { name: br_netfilter, state: present }
– name: Create k8s.conf for sysctl
ansible.builtin.copy:
dest: /etc/sysctl.d/k8s.conf
content: |
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
– name: Apply sysctl params
ansible.builtin.command: sysctl –system

– name: Install and configure containerd
block:
– name: Install required packages for containerd
ansible.builtin.dnf:
name: [dnf-utils, device-mapper-persistent-data, lvm2]
state: present
– name: Add Docker CE repository
ansible.builtin.get_url:
url: https://download.docker.com/linux/centos/docker-ce.repo
dest: /etc/yum.repos.d/docker-ce.repo
– name: Install containerd.io
ansible.builtin.dnf:
name: containerd.io
state: present
– name: Configure containerd to use systemd cgroup
ansible.builtin.shell: |
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
– name: Restart and enable containerd service
ansible.builtin.systemd:
name: containerd
state: restarted
enabled: yes

– name: Add Kubernetes v1.32 yum repository
ansible.builtin.yum_repository:
name: kubernetes
description: Kubernetes
# — 版本更新点 —
baseurl: https://pkgs.k8s.io/core:/stable:/v1.32/rpm/
gpgkey: https://pkgs.k8s.io/core:/stable:/v1.32/rpm/repodata/repomd.xml.key
gpgcheck: yes
enabled: yes
exclude: kubelet kubeadm kubectl cri-tools kubernetes-cni

– name: Install Kubernetes components
ansible.builtin.dnf:
name: [kubelet, kubeadm, kubectl]
state: present
disable_excludes: kubernetes

– name: Enable kubelet service
ansible.builtin.systemd:
name: kubelet
enabled: yes

(2)在 roles/master/tasks/main.yml编写master角色

vim ~/ansible-k8s-deployment/roles/master/tasks/main.yml

# tasks file for master role
– name: Initialize the Kubernetes cluster with kubeadm
ansible.builtin.shell: "kubeadm init –apiserver-advertise-address={{ master_ip }} –pod-network-cidr={{ pod_network_cidr }} –upload-certs"
args:
creates: /etc/kubernetes/admin.conf

– name: Setup kubectl for the root user
ansible.builtin.file:
path: /root/.kube
state: directory
owner: root
group: root
mode: '0755'

– name: Copy admin.conf to user's kube config
ansible.builtin.copy:
src: /etc/kubernetes/admin.conf
dest: /root/.kube/config
remote_src: yes
owner: root
group: root
mode: '0644'

– name: Install Calico network CNI
ansible.builtin.shell: "kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.3/manifests/calico.yaml"
args:
creates: /etc/cni/net.d/10-calico.conflist

– name: Generate join command
ansible.builtin.command: kubeadm token create –print-join-command
register: join_command_raw

– name: Store join command
ansible.builtin.set_fact:
join_command: "{{ join_command_raw.stdout }}"

(3)在~/ansible-k8s-deployment/roles/worker/tasks/main.yml编写worker角色

vim ~/ansible-k8s-deployment/roles/worker/tasks/main.yml

– name: Join the worker nodes to the cluster
ansible.builtin.command: "{{ hostvars[groups['masters'][0]]['join_command'] }}"
args:
creates: /etc/kubernetes/kubelet.conf

使用tree命令获取的目录结构如图(你可能没有安装tree包,使用dnf install  -y tree安装)

3.时钟同步

设置时区

timedatectl set-timezone Asia/Shanghai

安装 chrony并手动同步

sudo dnf install chrony

sudo systemctl start chronyd

sudo systemctl enable chronyd

sudo chronyc makestep

在我们进一步前,我们应该确认集群的时间同步状态,

先输入:

for node in k8s-node{1..3}; do
ssh "$node" 'date +"%Y-%m-%d %H:%M:%S.%N"' &
done
wait

会出现当前各节点的时间,如图:

时差应该在100ms之内,证明时钟服务正常,否则请检查各节点的时钟同步

尝试执行playbook,此代码会报错,这是正常的,原因在于代码中调用的ansible.posix 和 community.general的两个内容集合没有安装。

cd ~/ansible-k8s-deployment

ansible-playbook deploy-k8s.yml

创建依赖项文件  ~/ansible-k8s-deployment/requirements.yml


collections:
– name: ansible.posix
version: ">=1.5.4" # 指定一个版本范围,保证稳定性
– name: community.general
version: ">=8.5.0"

安装依赖项(需要等待)

cd ~/ansible-k8s-deployment

ansible-galaxy install -r requirements.yml

完成后就可以再试一遍了,这也需要等待很长一段时间(由于下载源在外网,可能需要一些网络工具)这个代码在运行时也可能报错,大多是由于网络原因。

cd ~/ansible-k8s-deployment

ansible-playbook deploy-k8s.yml

运行后检查整个输出,应该无明显报错

四、检查并配置k8s

查看节点列表

kubectl get nodes -o wide

查看node列表

kubectl get pods -A

请检查所有的节点都是ready,所有的pod状态都是running(刚启动时可能没有运行,等一等就可以)

本文的目标已全部达成,如果要关闭虚拟机,请先关闭node2和node3,再关闭node1,开启时顺序相反

赞(0)
未经允许不得转载:网硕互联帮助中心 » SRE AI Agent 开发复盘及小白向教程 (一) 项目环境搭建
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!