在CentOS 7上使用kubeadm部署Kubernetes集群

如有错误,敬请谅解!

此文章仅为本人学习笔记,仅供参考,如有冒犯,请联系作者删除!!


前言:

Kubernetes是一个开源的容器编排平台,用于管理和自动化部署容器化的应用程序。

Kubeadm是Kubernetes官方社区推出的一个用于快速部署Kubernetes集群的工具,它可以帮助我们简化集群部署的过程。

1. 安装要求(可根据自己需求制定,仅供参考)

在开始之前,我们需要满足以下几个条件:

  • 3台虚拟机,操作系统 CentOS7.7-86_x64(我用的是VMWare起的虚拟机)
  • 硬件配置:2核4G 100G
  • 可以访问外网,需要拉取镜像,如果服务器不能上网,需要提前下载镜像并导入节点(如果无法访问外网参考:juejin.cn/post/720504...)
  • 禁止swap分区

2. 准备环境

以下是我本地的虚机IP配置

角色 IP
master 192.168.91.137
node1 192.168.91.138
node2 192.168.91.139

在准备好的3台虚机上执行以下命令,初始化环境

bash 复制代码
# 关闭防火墙 
systemctl stop firewalld 
systemctl disable firewalld 

# 关闭selinux 
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久 
setenforce 0 # 临时 

# 关闭swap 
swapoff -a # 临时 
sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久 

# 根据规划设置主机名 hostnamectl set-hostname <hostname> 
# 在master添加hosts,以下IP地址根据你的实际IP更改 
cat >> /etc/hosts << EOF 
192.168.91.137 k8smaster 
192.168.91.138 k8snode1 
192.168.91.139 k8snode2 
EOF 

# 将桥接的IPv4流量传递到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 # 生效 

# 时间同步 
yum install ntpdate -y 
ntpdate time.windows.com

3. 所有节点安装Docker/kubeadm/kubelet

3.1 安装Docker

Kubernetes默认CRI(容器运行时)为Docker,因此先安装Docker。

bash 复制代码
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-18.06.1.ce-3.el7 

systemctl enable docker && systemctl start docker 

docker --version 

配置docker源为国内源

bash 复制代码
$ cat > /etc/docker/daemon.json << EOF 
{ 
  "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"] 
} 
EOF 

# 重启 docker 使配置生效 
systemctl restart docker 

# 查看docker信息 
docker info

docker 的Registry Mirros如下表示配置成功

3.2 添加阿里云YUM软件源

bash 复制代码
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

3.3 安装kubeadm,kubelet和kubectl

bash 复制代码
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0 

systemctl enable kubelet

4. 部署Kubernetes Master

在192.168.91.137(Master)执行。 --apiserver-advertise-address={Master节点ip} 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址。

bash 复制代码
kubeadm init \ 
  --apiserver-advertise-address=192.168.91.137 \ 
  --image-repository registry.aliyuncs.com/google_containers \ 
  --kubernetes-version v1.18.0 \ 
  --service-cidr=10.96.0.0/12 \ 
  --pod-network-cidr=10.244.0.0/16

Master节点出现以下提示信息,表示安装成功

安装成功后,按照提示将kube config 文件复制到指定目录,如下:

bash 复制代码
mkdir -p $HOME/.kube 

cp -i /etc/kubernetes/admin.conf $HOME/.kube/config 

chown $(id -u):$(id -g) $HOME/.kube/config 

kubectl get nodes

5. 加入Kubernetes Node

在192.168.91.138和192.168.91.139(Node)执行。

向集群添加新节点,执行在kubeadm init输出的kubeadm join命令:

bash 复制代码
$ kubeadm join 192.168.91.137:6443 --token oej61r.n22wnd46np15tea7 \ 
   --discovery-token-ca-cert-hash sha256:ca04c678c4b307e92efe1642da09385fdca4d254f7d15e45b04d29176dc272a0

在k8snode1虚机上执行kubeadm join将k8snode1加入到集群

在k8snode2虚机上执行kubeadm join将k8snode2加入到集群

默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,操作如下:

bash 复制代码
kubeadm token create --print-join-command

6. 部署CNI网络插件

做完以上5步后,发现所有节点都是 NotReady 状态,是因为Kubernetes集群需要一个网络插件来提供容器之间的网络通信。我们可以选择安装Flannel插件,执行以下命令来部署:

bash 复制代码
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml kubectl get pods -A

出现以下说明网络插件安装成功,需要等一会网络插件相关pod才能起来

若出现以下情况:

则需要在/etc/hosts下添加主机ip映射信息,具体做法如下:

1、找到域名对应的ip地址

域名ip查询链接:http://ip.tool.chinaz.com/

2、/etc/hosts中添加主机ip映射信息

3、重新获取:

bash 复制代码
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

过几分钟后,执行 kubectl get pods -A,发现在namespace kube-flannel 下网络插件的pod已经处于 Running 状态

再次执行 kubectl get nodes 查看nodes状态,发现3个节点的状态已经从 NotReady 变成了 Ready,说明集群节点准备就绪,可以正常创建pod等

7. 测试kubernetes集群

在Kubernetes集群中创建一个pod,验证是否正常运行:

bash 复制代码
kubectl create deployment nginx --image=nginx $ kubectl expose deployment nginx --port=80 --type=NodePort $ kubectl get pod,svc

如下图,可以看到 nginx pod已经正常运行,而且创建的 svc 对外暴漏的端口是 31874

使用3台虚拟机的IP加上端口访问nginx服务 Master虚机IP+端口

k8snode1虚机IP+端口

k82node2虚机IP+端口

说明你可以使用任何一个Node节点的IP地址和NodePort来访问Nginx应用。


如有错误,请联系作者删除

并恳请同行朋友予以斧正,万分感谢!

相关推荐
HLC++11 小时前
Linux的进程间通信
android·linux·服务器
二宝哥12 小时前
CentOS 7.9 系统下 Redis 5.0.4 单机安装与源码编译安装指南
redis·centos
华清远见IT开放实验室12 小时前
实验室建设案例 | 石家庄科技信息职业学院嵌入式实验室——从底层硬件到系统应用,一所应用型高校的嵌入式人才培养这样落地
linux·arm开发·stm32·嵌入式硬件·高校·实验室建设
groundhappy15 小时前
idalib安装和codex ida-mcp配置
linux·开发语言·python
Hui Baby15 小时前
K8S使用CRD和控制器简单应用
云原生·容器·kubernetes
通信小小昕16 小时前
Ubuntu 26.04 中文输入法安装
linux·运维·ubuntu
张小姐的猫17 小时前
【Linux】网络编程 —— HTTP协议(上)
linux·运维·服务器·网络·http·单例模式·策略模式
栩栩云生17 小时前
AI 写代码犯的错,早被写进了错题集
linux·安全·ai编程
imc.1118 小时前
linux基础IO
linux·运维·服务器
BelongPanda20 小时前
Linux Nginx 纯手动 Let‘s Encrypt 泛域名证书配置教程
linux·nginx