基于Centos7.9搭建K8S集群(网络插件:flannel)

一、Centost7.9安装K8s集群(v1.28.0)

角色 IP地址
k8s-master 192.168.88.10
k8s-node1 192.168.88.11
k8s-node2 192.168.88.12
  • 虚拟机配置建议:4核CPU、4G内存、20G硬盘
  • 服务器可以访问互联网,会联网下载镜像

二、基础配置(三台都需要配置)

软件 版本
操作系统 CentOS-7-x86_64-DVD-2009.iso
Docker Docker version 26.1.4
kubernetes v1.28.0
关闭Selinux
~]# sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久
~]# setenforce 0  # 临时
# 关闭Swap
~]# swapoff -a  # 临时
~]# sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久

根据规划设置主机名

~]# hostnamectl set-hostname <hostname>

标题安装阿里云的yum源

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

确保网络桥接的数据包经过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  # 生效

三、安装Docker

~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
~]# yum -y install docker-ce
~]# systemctl enable docker && systemctl start docker

配置镜像下载加速器和设置Cgroup驱动

~]# cat > /etc/docker/daemon.json << EOF
  {
    "registry-mirrors": ["https:自己的阿里云镜像加速地址.aliyuncs.com"],
    "exec-opts": ["native.cgroupdriver=systemd"]
  }
EOF
~]# systemctl restart docker

标题安装cri-dockerd(Docker与Kubernetes通信的中间程序),有时候会出现安装包无法下载的问题

 wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.2/cri-dockerd-0.3.2-3.el7.x86_64.rpm
 rpm -ivh cri-dockerd-0.3.2-3.el7.x86_64.rpm
指定依赖镜像地址为国内镜像地址:
~]# vi /usr/lib/systemd/system/cri-docker.service
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9

~]# systemctl daemon-reload 
~]# systemctl enable cri-docker && systemctl start cri-docker

部署集群

添加阿里云YUM软件源

~]# 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

安装kubeadm,kubelet和kubectl

~]# yum install -y kubelet-1.28.0 kubeadm-1.28.0 kubectl-1.28.0
~]# systemctl enable kubelet

初始化主节点

~]# kubeadm init   --apiserver-advertise-address=192.168.88.10   --image-repository registry.aliyuncs.com/google_containers   --kubernetes-version v1.28.0   --service-cidr=10.96.0.0/12   --pod-network-cidr=10.244.0.0/16   --cri-socket=unix:///var/run/cri-dockerd.sock
初始化完成后,根据提示信息,拷贝kubectl工具认证文件到默认路径:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

使用kubectl工具查看节点状态

~]# kubectl get nodes
NAME               STATUS     ROLES            AGE   VERSION
k8s-master     NotReady   control-plane        29s   v1.28.0

由于网络插件还没有部署,节点会处于“NotReady”状态,安装完Calico或者flannel再次查看才会获得节点和pod的状态。

节点加入集群

kubeadm join 192.168.88.10:6443 --token m1fjhe.oykxam4vxhzq9u5b \
	--discovery-token-ca-cert-hash sha256:07d4a0122be4a28ec7fb3f91d132b0dce583d44f9b6ebd81eecfdee3a443d2d4 --cri-socket=unix:///var/run/cri-dockerd.sock

本次搭建的集群节点加入集群出现报错

可能会出现此报错:[ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1

执行echo 1 > /proc/sys/net/ipv4/ip_forward即可解决

标题安装网络插件

本次集群搭建使用的是flannel插件

flannel.yml内容如下:

apiVersion: v1
kind: Namespace
metadata:
  labels:
    k8s-app: flannel
    pod-security.kubernetes.io
<think>好的,我现在需要在CentOS 7.9上使用Ansible来搭建Kubernetes集群。首先,我得了解Ansible和Kubernetes的基本知识,以及它们如何结合使用。不过用户可能已经知道这些,所以直接进入部署步骤吧。 首先,系统要求。Kubernetes集群对节点有一些要求,比如需要关闭防火墙、禁用SELinux、配置时间同步等等。用户提到的引用[4]里提到时间同步需要用到chrony,所有节点时间必须一致。所以第一步应该是所有节点安装chrony,配置NTP服务器,比如阿里云和腾讯云的,然后启动服务。这点我记得在引用[4]中有详细步骤,可能需要参考。 然后是节点准备。需要确认所有节点的主机名解析,可能要在/etc/hosts里添加各个节点的IP和主机名。或者配置DNS,确保节点间能互相解析。另外,swap需要关闭,因为Kubernetes默认不支持swap,否则kubelet会出问题。可以通过sudo swapoff -a临时关闭,并修改/etc/fstab永久关闭。同时,编辑/etc/sysctl.conf设置内核参数,如net.bridge.bridge-nf-call-iptables=1等,然后sysctl --system应用。 接下来安装容器运行时,比如Docker或者containerd。根据Kubernetes的版本选择合适的容器运行时版本。用户之前的引用中有提到容器镜像部署,可能用Docker比较常见。安装Docker的话,需要配置仓库,安装并启动服务,设置开机自启。不过现在可能更推荐containerd,但步骤类似,需要安装并配置。 然后是安装Kubernetes组件,如kubeadm、kubelet、kubectl。这里用户提到的引用[3]是添加阿里云的YUM源,这样可以加速安装。需要创建kubernetes.repo文件,指定baseurl为阿里云镜像站。然后用yum安装这三个组件,并启动kubelet服务。 接下来使用Ansible进行自动化部署。这里可能需要编写Ansible playbook,来批量执行上述步骤到各个节点。比如,引用[2]提到的Kubespray是一个使用Ansible部署Kubernetes的工具,可能更适合用户的需求。或者用户想自己写playbook,分步骤配置各个节点。 如果是使用Kubespray的话,步骤可能包括克隆Kubespray仓库,安装依赖,配置inventory文件,指定master和worker节点,然后运行ansible-playbook命令。这可能需要调整一些变量,比如kube_version,网络插件(Calico、Flannel等),以及容器运行时配置。 不过用户的问题是如何通过Ansible部署,所以可能需要两种方式:自己编写playbook或者使用现有的工具如Kubespray。如果用户想自己编写,那么需要分步骤: 1. 在所有节点上执行系统配置(关闭防火墙、SELinux,时间同步,swap关闭,内核参数)。 2. 安装容器运行时。 3. 安装Kubernetes组件。 4. 初始化控制平面节点。 5. 加入工作节点。 6. 部署网络插件。 每一步都需要对应的Ansible任务。比如,使用Ansible的yum模块安装软件包,template模块配置文件,systemd模块管理服务,shell模块执行命令等。 在初始化控制平面时,可能需要使用kubeadm init命令,然后配置kubeconfig文件。这部分可以通过Ansible在master节点上执行,并获取join命令,然后将该命令传递给worker节点执行。不过自动化处理这个可能需要处理输出中的token和ca证书哈希,可能需要用正则表达式提取。 另外,引用[1]里有一个检查kube-apiserver状态的命令,可能需要在部署完成后进行验证,比如使用ansible的shell模块执行systemctl status kube-apiserver等命令,确认服务正常运行。 在编写playbook时,需要注意节点的角色区分,比如master节点需要安装apiserver、controller-manager、scheduler等组件,而worker节点只需要kubelet和kube-proxy。或者使用kubeadm的话,可能通过kubeadm join来统一处理。 可能遇到的问题包括:节点间通信问题,防火墙没关闭导致端口阻塞,SELinux未禁用,时间不同步导致证书错误,镜像拉取失败(需要配置镜像仓库或者使用国内源),以及kubelet启动失败等。需要逐一排查。 总结步骤大致如下: 1. 准备节点:配置主机名、hosts文件,关闭防火墙和SELinux,禁用swap,配置内核参数,安装chrony并同步时间。 2. 安装容器运行时(如Docker或containerd)。 3. 配置Kubernetes的YUM源,安装kubeadm、kubelet、kubectl。 4. 使用Ansible编写playbook,分角色执行上述步骤到所有节点。 5. 在master节点上执行kubeadm init,生成join命令。 6. 将join命令通过Ansible传递给worker节点执行。 7. 安装网络插件(如Calico、Flannel)。 8. 验证集群状态,检查各组件是否正常运行。 同时需要参考用户提供的引用内容,例如引用[3]中的阿里云YUM源配置,引用[4]中的chrony配置,引用[2]中的Kubespray工具的使用,以及引用[1]中的服务状态检查命令。 可能还需要考虑高可用配置,如果是生产环境,可能需要多个master节点,但用户的问题可能只需要单master集群。这需要根据需求调整。 最后,生成相关问题时要围绕部署过程中可能涉及的优化、验证、故障排除等方面提问。</think>### 在 CentOS 7.9 上通过 Ansible 部署 Kubernetes 集群的步骤 #### 1. 环境准备 - **系统要求**: - 所有节点(Master/Worker)使用 CentOS 7.9。 - 禁用防火墙和 SELinux: ```bash systemctl stop firewalld && systemctl disable firewalld setenforce 0 && sed -i &#39;s/^SELINUX=enforcing/SELINUX=disabled/&#39; /etc/selinux/config ``` - 关闭 Swap: ```bash swapoff -a && sed -i &#39;/ swap / s/^\(.*\)$/#\1/g&#39; /etc/fstab ``` - 时间同步(引用[4]): ```bash yum -y install chrony systemctl enable chronyd && systemctl start chronyd ``` #### 2. 安装依赖工具 - **Ansible 配置**: - 在 Ansible 控制节点安装 Ansible: ```bash yum install -y epel-release && yum install -y ansible ``` - 配置节点清单文件 `inventory.ini`: ```ini [master] kube-master01 ansible_host=192.168.1.10 [worker] kube-worker01 ansible_host=192.168.1.11 kube-worker02 ansible_host=192.168.1.12 [k8s:children] master worker ``` #### 3. 使用 Ansible Playbook 自动化部署 - **创建 Playbook 文件 `deploy-k8s.yml`**: ```yaml - hosts: k8s tasks: - name: 安装 Kubernetes 阿里云源(引用[3]) copy: content: | [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 dest: /etc/yum.repos.d/kubernetes.repo - name: 安装 Docker 和 Kubernetes 组件 yum: name: ["docker-ce", "kubelet-1.23.0", "kubeadm-1.23.0", "kubectl-1.23.0"] state: present - name: 启动 Docker 和 Kubelet systemd: name: "{{ item }}" enabled: yes state: started loop: [docker, kubelet] ``` #### 4. 初始化 Master 节点 - **手动执行(或通过 Ansible Task)**: ```bash kubeadm init --image-repository registry.aliyuncs.com/google_containers ``` 记录输出的 `kubeadm join` 命令,用于 Worker 节点加入集群。 #### 5. 配置网络插件(如 Calico) - **通过 Ansible 在 Master 节点执行**: ```bash kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml ``` #### 6. 验证集群状态 - **使用 Ansible 检查服务状态(引用[1])**: ```bash ansible kube-master01 -m shell -a "systemctl status kube-apiserver | grep Active" ``` --- ###
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值