centos服务器搭建k8s集群

简单说几句

我这里用到了CentOS7.6服务器3台(2核4G),我是自己在我windows的虚拟机弄了三台centos,我后面会把我安装的文档放在下面,需要的话自己下去看看。这里多啰嗦一句,搭建好一台,后面两台直接克隆,这样比较节约时间和精力。看笔记的时候要仔细,一步一步来肯定可以搭建好的。

环境准备

1- 修改hostname (可以不用修改,但是修改下后面用起来爽点)

vi /etc/hostname

2- 配置hosts文件

vi /etc/hosts

例子: 192.168.xx.x1 master
      192.168.xx.x2 node01
      192.168.xx.x3 node02 

3- 关闭防火墙

systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld

4- 禁用selinux

# 临时禁用selinux
setenforce 0
# 永久关闭 修改/etc/sysconfig/selinux文件设置
sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

5- 禁用交换分区

swapoff -a
# 永久禁用。建议永久禁用,后面万一重启忘了禁用,不仔细看bug信息又要花时间找bug
sed -i 's/.*swap.*/#&/' /etc/fstab

6- 修改系统配置

cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system

7- 同步时间

yum install ntp
systemctl enable ntpd
systemctl start ntpd
timedatectl set-timezone Asia/Shanghai
timedatectl set-ntp yes
ntpq -p

或者用

yum -y install ntpdate
ntpdate time2.aliyun.com

最后重启下所有的服务器。下面我们开始装docker

安装docker

# 安装docker所需的工具
yum install -y yum-utils device-mapper-persistent-data lvm2
# 配置阿里云的docker源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 指定安装这个版本的docker-ce
yum install docker-ce.x86_64
# 启动docker
systemctl enable docker && systemctl start docker

这里可以配置下加速,我用的是阿里的,阿里docker镜像加速

安装k8s

1- 配置k8s下载源

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[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
EOF

2- 安装kubeadm、kubectl、kubelet

yum install -y kubectl kubeadm kubelet

3- 启动kubelet服务

systemctl enable kubelet && systemctl start kubelet

master配置

4- 初始化k8s(这一步会有点慢,可以吃个东西等,省的太无聊)

kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.23.4 --apiserver-advertise-address 你的master服务器ip --pod-network-cidr=10.244.0.0/16 --token-ttl 0

5- 配置config文件(上一步成功会告诉你)

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

6- 检验结果
到这一步已经差不多了,后面就差将节点join到master。我们校验下master

kubectl get pods --all-namespaces

节点配置

master初始化成功会有一条让节点join到master命令的,如果你忘了你可以执行下面的命令来看join命令:kubeadm token create --print-join-command

类似下面这条命令

kubeadm join xxx.xxx.xxx.xxx:6443 --token ncfrid.xxxxxxxx 
    --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxx

然后我们来到master服务器上执行 kubectl get nodes 看看集群情况

会发现还是处于Notready,这里需要我们安装flane组件,大家可以去这个兄弟的博客看看(只需要在master分支):Kubernetes 安装flannel组件(本地 kube-flannel.yml 文件

可视化工具

1- 安装cockpit管理集群

yum install cockpit
yum install cockpit-docker.x86_64
yum install cockpit-kubernetes.x86_64
systemctl enable cockpit.socket 
systemctl start cockpit.socket

成功后访问 master ip:9090 ,账户密码是这台服务器账户和密码

2- dashboard安装

直接看我之前的文章吧,再写一次没意义:Kubernetes 单机安装—kubeadm

遇到的错误

安装的时候碰到了问题,我这里分享下:

1- error execution phase kubelet-start: error uploading crisocket: timed out waiting for the condition

解决:

swapoff -a
kubeadm reset
systemctl daemon-reload
systemctl restart kubelet
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X  

这里说一嘴,如果执行kubeadm init初始化,可以kubeadm reset重置,在进行初始化

2- kubectl這些命令下載了但是沒有用(这个是因为我之前安装了,重新装的时候出现问题了,只有master出现这个问题,节点没有)

解决:可以用yum remove刪除了在下載就行了,懷疑是不是緩存的問題

3- 节点执行kubectl抛出找不到localhost:8080的错误解决方法

解决:
主节点的admin.conf拷贝到从节点,设置环境变量,可以参考这个文章
# 解决The connection to the server localhost:8080 was refused - did you specify the right host or port?

参考链接

二进制安装k8s集群

CentOS7下快速搭建K8s集群实践(这个版本太老了,可以参考下,作者的思路还是可以借鉴的,我执行后没有安装成功= =||)

VMware安装最新版CentOS7图文教程

vmware workstation 百度云链接 下载

<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 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config ``` - 关闭 Swap: ```bash swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /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" ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木子林_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值