首页 > 系统相关 >CentOS7部署Kubernetes高可用集群(上)

CentOS7部署Kubernetes高可用集群(上)

时间:2024-08-17 22:24:13浏览次数:17  
标签:k8s kubernetes Kubernetes CentOS7 Running 集群 kube 节点

目录

kubernetes介绍

kubernetes具备的功能

kubernetes集群角色

kubernetes集群类型

kubernetes集群规划

kubernetes集群环境准备 

部署HAProxy及Keepalived

kubernetes集群部署方式介绍

kubeadm部署kubernetes集群

kubernetes集群初始化

部署Pod网络插件Calico

部署Nginx测试集群是否正常


kubernetes介绍

kubernetes(k8s)是2014年由Google公司基于Go语言编写的一款开源的容器集群编排系统,用于自动化容器的部署、扩缩容和管理;

kubernetes(k8s)是基于Google内部的Borg系统的特征开发的一个版本,集成了Borg系统大部分优势;

官方地址:Kubernetes

代码托管平台:Kubernetes · GitHub

除了k8s还有哪些容器编排系统?如:docker swarmOpenshiftRancherMesos等。

kubernetes具备的功能

  • 自我修复:k8s可以监控容器的运行状况,并在发现容器出现异常时自动重启故障实例;
  • 弹性伸缩:k8s可以根据资源的使用情况自动地调整容器的副本数。例如,在高峰时段,k8s可以自动增加容器的副本数以应对更多的流量;而在低峰时段,k8s可以减少应用的副本数,节省资源;
  • 资源限额:k8s允许指定每个容器所需的CPU和内存资源,能够更好的管理容器的资源使用量;
  • 滚动升级:k8s可以在不中断服务的情况下滚动升级应用版本,确保在整个过程中仍有足够的实例在提供服务;
  • 负载均衡:k8s可以根据应用的负载情况自动分配流量,确保各个实例之间的负载均衡,避免某些实例过载导致的性能下降;
  • 服务发现:k8s可以自动发现应用的实例,并为它们分配一个统一的访问地址。这样,用户只需要知道这个统一的地址,就可以访问到应用的任意实例,而无需关心具体的实例信息;
  • 存储管理:k8s可以自动管理应用的存储资源,为应用提供持久化的数据存储。这样,在应用实例发生变化时,用户数据仍能保持一致,确保数据的持久性;
  • 密钥与配置管理:Kubernetes 允许你存储和管理敏感信息,例如:密码、令牌、证书、ssh密钥等信息进行统一管理,并共享给多个容器复用;

kubernetes集群角色

k8s集群需要建⽴在多个节点上,将多个节点组建成一个集群,然后进⾏统⼀管理,但是在k8s集群内部,这些节点⼜被划分成了两类⻆⾊:

  • Master管理节点:负责集群的所有管理工作,和协调集群中运行的容器应用;
  • Node工作节点:负责运行集群中所有用户的容器应用, 执行实际的工作负载 ;

Master管理节点组件:

  • API Server:作为集群的控制中心,处理外部和内部通信,接收用户请求并处理集群内部组件之间的通信;
  • Scheduler:负责将待部署的 Pods 分配到合适的 Node 节点上,根据资源需求、策略和约束等因素进行调度;
  • Controller Manager:管理集群中的各种控制器,例如: Deployment、ReplicaSet、StatefulSet控制器等,来管理集群中的各种资源;
  • etcd:作为集群的数据存储,保存集群的配置信息和状态信息;

Node工作节点组件:

  • Kubelet:负责与 Master 节点通信,并根据 Master 节点的调度决策来创建、更新和删除 Pod,同时维护 Node 节点上的容器状态;
  • 容器运行时(如 Docker、containerd 等):负责运行和管理容器,提供容器生命周期管理功能。例如:创建、更新、删除容器等;
  • Kube-proxy:负责为集群内的服务实现网络代理和负载均衡,确保服务的访问性;

非必须的集群组件:

  • DNS服务:严格意义上的必须插件,在k8s中,很多功能都需要用到DNS服务,例如:服务发现、有状态应用的访问等;
  • Dashboard: 是k8s集群WEB管理界面,如:Rancher、Kuboard等
  • 资源监控:例如metrics-server监视器,用于监控集群中资源利用率;

kubernetes集群类型

  • 一主多从集群:由一台Master管理节点和多台Node工作节点组成,生产环境下Master节点存在单点故障的风险,适合学习和测试环境使用;
  • 多主多从集群:由多台Master管理节点和多Node工作节点组成,安全性高,适合生产环境使用;

kubernetes集群规划

IP地址

主机名称

主机角色

主机最低配置参考

系统镜像版本
10.35.152.28

master01

管理节点

2核心CPU/4G内存/50G磁盘

CentOS-7-x86_64-Minimal-2009
10.35.152.29

master02

管理节点

2核心CPU/4G内存/50G磁盘

CentOS-7-x86_64-Minimal-2009
10.35.152.30

master03

管理节点

2核心CPU/4G内存/50G磁盘

CentOS-7-x86_64-Minimal-2009
10.35.152.31

node01

工作节点

1核心CPU/2G内存/50G磁盘

CentOS-7-x86_64-Minimal-2009
10.35.152.32

node02

工作节点

1核心CPU/2G内存/50G磁盘

CentOS-7-x86_64-Minimal-2009
10.35.152.37

k8s-ha1

主负载均衡

1核心CPU/2G内存/50G磁盘

CentOS-7-x86_64-Minimal-2009
10.35.152.39

k8s-ha2

备负载均衡

1核心CPU/2G内存/50G磁盘

CentOS-7-x86_64-Minimal-2009

修改主机名

# 对10.35.152.28操作
hostnamectl set-hostname master01

# 对10.35.152.29操作
hostnamectl set-hostname master02

# 对10.35.152.30操作
hostnamectl set-hostname master03

# 对10.35.152.31操作
hostnamectl set-hostname node01

# 对10.35.152.32操作
hostnamectl set-hostname node02

# 对10.35.152.37操作
hostnamectl set-hostname k8s-ha1

## 对10.35.152.39操作
hostnamectl set-hostname k8s-ha2

全部主机都配置阿里镜像源

rm -rf /etc/yum.repos.d/*
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo 
yum -y install wget
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo  

全部主机导入初始化脚本跑一遍进行设置

#!/bin/bash
echo "=====系统环境初始化脚本====="
sleep 3
echo "——>>> 关闭防火墙与SELinux <<<——"
sleep 3
systemctl stop firewalld
systemctl disable firewalld &> /dev/null
setenforce 0
sed -i '/SELINUX/{s/enforcing/disabled/}' /etc/selinux/config

echo "——>>> 创建阿里仓库 <<<——"
sleep 3
rm -rf /etc/yum.repos.d/*
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo 
yum -y install wget
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo  


echo "——>>> 设置时区并同步时间 <<<——"
sleep 3
timedatectl set-timezone Asia/Shanghai
yum -y install chrony
systemctl start chronyd
systemctl enable chronyd


echo "——>>> 设置系统最大打开文件数 <<<——"
sleep 3
if ! grep "* soft nofile 65535" /etc/security/limits.conf &>/dev/null; then
cat >> /etc/security/limits.conf << EOF
* soft nofile 65535   #软限制
* hard nofile 65535   #硬限制
EOF
fi

echo "——>>> 系统内核优化 <<<——"
sleep 3
cat >> /etc/sysctl.conf << EOF
net.ipv4.tcp_syncookies = 1             #防范SYN洪水攻击,0为关闭
net.ipv4.tcp_max_tw_buckets = 20480     #此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死
net.ipv4.tcp_max_syn_backlog = 20480    #表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数
net.core.netdev_max_backlog = 262144    #每个网络接口 接受数据包的速率比内核处理这些包的速率快时,允许发送到队列的数据包的最大数目
net.ipv4.tcp_fin_timeout = 20           #FIN-WAIT-2状态的超时时间,避免内核崩溃
EOF

echo "——>>> 减少SWAP使用 <<<——"
sleep 3
echo "0" > /proc/sys/vm/swappiness

echo "——>>> 安装系统性能分析工具及其他 <<<——"
sleep 3
yum install -y gcc make autoconf vim sysstat net-tools iostat  lrzsz

kubernetes集群环境准备 

以下前期环境准备需要在所有节点都执行(不包括负载均衡的两个节点

提示:不要忘了在每个节点都跑一遍环境初始化脚本!!!!!

配置集群之间本地解析

集群在初始化时,需要解析每个节点主机名,作为该节点在集群中的名称

cat >> /etc/hosts <<EOF
10.35.152.28 master01
10.35.152.29 master02
10.35.152.30 master03
10.35.152.31 node01
10.35.152.32 node02
EOF

开启bridge网桥过滤功能

bridge(桥接网络) 是Linux系统中的一种虚拟网络设备,充当一个虚拟交换机,为集群内的容器提供网络通信功能,容器就可以通过bridge与其他容器或外部网络通信了。

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

参数解释:

net.bridge.bridge-nf-call-ip6tables = 1  //对网桥上的IPv6数据包通过iptables处理

net.bridge.bridge-nf-call-iptables = 1    //对网桥上的IPv4数据包通过iptables处理

net.ipv4.ip_forward = 1                         //开启IPv4路由转发,来实现集群中的容器与外部网络的通信

由于开启bridge功能,需要加载br_netfilter模块使参数生效

modprobe br_netfilter && lsmod | grep br_netfilter

加载配置文件,使上述配置生效

sysctl -p /etc/sysctl.d/k8s.conf

关闭SWAP分区

为了保证 kubelet 正常工作,k8s强制要求禁用,否则集群初始化失败

swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab

安装Docker

安装yum-utils依赖包提供yum-config-manager命令

yum install -y yum-utils

添加阿里云docker-ce仓库

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装docker软件包

yum -y install docker-ce-20.10.9-3.el7

启用Docker Cgroup控制组,用于限制进程的资源使用量,如CPU、内存,在配置镜像加速器,方便后期拉取镜像

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
        "https://docker.rainbond.cc" ,
        "https://do.nark.eu.org",
        "https://dc.j8.work",
        "https://pilvpemn.mirror.aliyuncs.com",
        "https://docker.m.daocloud.io",
        "https://dockerproxy.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://docker.nju.edu.cn"
   ],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

启动Docker服务并设置随机自启

systemctl enable docker --now

部署HAProxy及Keepalived

haproxy:为apiserver提供代理,集群的管理请求通过VIP进行接收,haproxy将所有管理请求轮询转发到每个master节点上。

Keepalived:为haproxy提供vip(10.35.152.199)在二个haproxy之间提供主备,实现代理故障自动切换。

以下操作只需要在k8s-ha1k8s-ha2配置。

提示:不要忘了跑一遍环境初始化脚本!!!!!

安装haproxy和keepalived软件包

yum -y install haproxy keepalived

修改haproxy配置文件

配置文件内容如下,该配置文件内容在k8s-ha1与k8s-ha2节点保持一致

vim /etc/haproxy/haproxy.cfg   # 将上述代码替换进去,注意修改IP
global
  maxconn  2000                   #单个进程最大并发连接数
  ulimit-n  16384                 #每个进程可以打开的文件数量
  log  127.0.0.1 local0 err       #日志输出配置,所有日志都记录在本机系统日志,通过 local0 输出
  stats timeout 30s               #连接socket超时时间

defaults
  log global                      #定义日志为global(全局)
  mode  http                      #使用的连接协议
  option  httplog                 #日志记录选项,httplog表示记录与HTTP会话相关的日志
  timeout connect 5000            #定义haproxy将客户端请求转发至后端服务器所等待的超时时长
  timeout client  50000           #客户端非活动状态的超时时长
  timeout server  50000           #客户端与服务器端建立连接后,等待服务器端的超时时长
  timeout http-request 15s        #客户端建立连接但不请求数据时,关闭客户端连接超时时间
  timeout http-keep-alive 15s     # session 会话保持超时时间

frontend monitor-in               #监控haproxy服务本身
  bind *:33305                    #监听的端口
  mode http                       #使用的连接协议
  option httplog                  #日志记录选项,httplog表示记录与HTTP会话相关的日志
  monitor-uri /monitor            #监控URL路径

frontend k8s-master               #接收请求的前端名称,名称自定义,类似于Nginx的一个虚拟主机server。
  bind 0.0.0.0:6443               #监听客户端请求的 IP地址和端口(以包含虚拟IP)
  bind 127.0.0.1:6443 
  mode tcp                        #使用的连接协议
  option tcplog                   #日志记录选项,tcplog表示记录与tcp会话相关的日志
  tcp-request inspect-delay 5s    #等待数据传输的最大超时时间
  default_backend k8s-master      #将监听到的客户端请求转发到指定的后端

backend k8s-master                #后端服务器组,要与前端中设置的后端名称一致
  mode tcp                        #使用的连接协议
  option tcplog                   #日志记录选项,tcplog表示记录与tcp会话相关的日志
  option tcp-check                #tcp健康检查
  balance roundrobin              #负载均衡方式为轮询
  default-server inter 10s downinter 5s rise 2 fall 2 slowstart 60s maxconn 250 maxqueue 256 weight 100
  server master01   10.35.152.28:6443  check  # 根据自己环境修改后端实例IP
  server master02   10.35.152.29:6443  check  # 根据自己环境修改后端实例IP
  server master03   10.35.152.30:6443  check  # 根据自己环境修改后端实例IP

k8s-ha1与k8s-ha2启动haproxy

systemctl enable haproxy --now

修改keepalived配置文件

k8s-ha1节点keepalived配置文件内容如下

[root@k8s-ha1 ~]# vim /etc/keepalived/keepalived.conf    # 替换下述配置,注意修改vip
! Configuration File for keepalived
global_defs {
    router_id LVS_DEVEL
script_user root
    enable_script_security
}
vrrp_script chk_haproxy {
    script "/etc/keepalived/check_haproxy.sh"
    interval 5
    weight -5
    fall 2
rise 1
}
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 101
    advert_int 2
    authentication {
        auth_type PASS
        auth_pass abc123
    }
    virtual_ipaddress {
        10.35.152.199/24
    }
    track_script {
       chk_haproxy
    }
}

k8s-ha2节点keepalived配置文件内容如下

! Configuration File for keepalived
global_defs {
    router_id LVS_DEVEL
script_user root
    enable_script_security
}
vrrp_script chk_haproxy {
    script "/etc/keepalived/check_haproxy.sh"
    interval 5
    weight -5
    fall 2
rise 1
}
vrrp_instance VI_1 {
    state BACKUP		#需要修改节点身份
    interface ens33
    virtual_router_id 51
    priority 99			#备用节点优先级不能高于master
    advert_int 2
    authentication {
        auth_type PASS
        auth_pass abc123
    }
    virtual_ipaddress {
        10.35.152.199/24
    }
    track_script {
       chk_haproxy
    }
}

k8s-ha1与k8s-ha2定义检测haproxy脚本

cat > /etc/keepalived/check_haproxy.sh <<EOF
#!/bin/bash
#检测haproxy状态
count=$(ps -C haproxy | grep -v PID | wc -l)
if [ $count -eq 0 ];then
   systemctl stop keepalived
fi
EOF

脚本添加执行权限

chmod +x /etc/keepalived/check_haproxy.sh

k8s-ha1与k8s-ha2节点启动keepalived

systemctl enable keepalived --now

在k8s-ha1节点确认VIP地址是否生成(ifconfig命令查看不到VIP)

[root@k8s-ha1 ~]# ip a s ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:dd:fe:56 brd ff:ff:ff:ff:ff:ff
    inet 10.35.152.37/24 brd 10.35.152.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 10.35.152.199/24 scope global secondary ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::a462:fda4:3a65:d6ec/64 scope link tentative noprefixroute dadfailed 
       valid_lft forever preferred_lft forever
    inet6 fe80::436:16a5:c5d:2253/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

kubernetes集群部署方式介绍

kubernetes集群有多种部署方式,目前常用的部署方式有如下两种:

  • kubeadm部署方式:kubeadm是一个快速搭建kubernetes的集群工具。
  • 二进制包部署方式:从官网下载每个组件的二进制包,依次去安装,部署麻烦。
  • 其他方式:通过一些开源的工具搭建,例如:sealos

kubeadm部署kubernetes集群

准备阿里云kubernetes仓库

提示:集群所有节点准备仓库,不包括负载均衡节点

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=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

安装集群所需软件包

  • kubeadm:用于初始化集群,并配置集群所需的组件并生成对应的安全证书和令牌;
  • kubelet:负责与 Master 节点通信,并根据 Master 节点的调度决策来创建、更新和删除 Pod,同时维护 Node 节点上的容器状态;
  • kubectl:用于管理k8集群的一个命令行工具;
yum install -y kubeadm-1.23.0-0  kubelet-1.23.0-0 kubectl-1.23.0-0

配置kubelet Cgroup控制组

kubelet启用Cgroup控制组,用于限制容器进程的CPU、内存资源使用量

cat > /etc/sysconfig/kubelet <<EOF
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
EOF

设置kubelet开机自启即可,集群初始化时kubelet会随着集群启动

systemctl enable kubelet

kubernetes集群初始化

提示:在master01节点初始化集群

查看集群所需镜像文件

kubeadm config images list

手动拉取完镜像并改tag 

# 拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.23.0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.23.0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.23.0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.23.0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.1-0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.6

# 给镜像重新打标签
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.23.0 k8s.gcr.io/kube-apiserver:v1.23.0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.23.0 k8s.gcr.io/kube-controller-manager:v1.23.0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.23.0 k8s.gcr.io/kube-scheduler:v1.23.0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.23.0 k8s.gcr.io/kube-proxy:v1.23.0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6 k8s.gcr.io/pause:3.6
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.1-0 k8s.gcr.io/etcd:3.5.1-0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.6 k8s.gcr.io/coredns/coredns:v1.8.6

生成集群初始化配置文件

kubeadm config print init-defaults > kubeadm-config.yaml

配置文件需要修改如下内容

apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: 7t2weq.bjbawausm0jaxury
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 10.35.152.28       		#本机IP
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  name: master01                       		#告诉k8s你的本机名称
  taints:
  - effect: NoSchedule
    key: node-role.kubernetes.io/master
---
apiServer:
  certSANs:
  - 10.35.152.199                        	#在证书中指定的可信IP地址,负载均衡的VIP
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controlPlaneEndpoint: 10.35.152.199:6443  #定义集群内部通信的地址及端口(负载均衡VIP地址)
controllerManager: {}
dns:
  type: CoreDNS
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers   #集群组件镜像仓库地址
kind: ClusterConfiguration
kubernetesVersion: v1.23.0    
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12 
scheduler: {}

初始化集群

kubeadm init --config kubeadm-config.yaml --upload-certs

选项说明:

init //初始化集群

--config //基于配置文件初始化

--upload-certs //初始化过程将生成证书,并将其上传到etcd存储中,否则节点无法加入集群

初始化成功后,按照提示准备集群管理员配置文件

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

提示:根据集群生成的指令,将master02、master03、node01、node02分别加入到集群中。

部署Pod网络插件Calico

Calico 和 Flannel 是两种流行的 k8s 网络插件,它们都为集群中的 Pod 提供网络功能,然而,它们在实现方式和功能上有一些重要区别:

模型的区别:

  • Calico 使用 BGP(边界网关协议)作为其底层网络模型。它利用 BGP 为每个 Pod 分配一个唯一的 IP 地址,并在集群内部进行路由。Calico 支持网络策略,可以对流量进行精细控制,允许或拒绝特定的通信。
  • Flannel 则采用了一个简化的覆盖网络模型。它为每个节点分配一个 IP 地址子网,然后在这些子网之间建立覆盖网络。Flannel 将 Pod 的数据包封装到一个更大的网络数据包中,并在节点之间进行转发。Flannel 更注重简单和易用性,不提供与 Calico 类似的网络策略功能。

性能的区别:

  • 由于 Calico 使用 BGP 进行路由,其性能通常优于 Flannel。Calico 可以实现直接的 Pod 到 Pod 通信,而无需在节点之间进行额外的封装和解封装操作。这使得 Calico 在大型或高度动态的集群中具有更好的性能。
  • Flannel 的覆盖网络模型会导致额外的封装和解封装开销,从而影响网络性能。对于较小的集群或对性能要求不高的场景,这可能并不是一个严重的问题。

在master01节点下载Calico文件(由于网络原因可能无法下载,可用浏览器发开这个地址手动复制内容,手动创建这个文件并粘贴即可)

wget https://raw.githubusercontent.com/projectcalico/calico/v3.24.1/manifests/calico.yaml

在master01节点创建Calico网络

kubectl apply -f calico.yaml 

等待Calico的Pod状态为Running即可,需要耐心等待它全部起来。

[root@master01 ~]# kubectl get pod -n kube-system
NAME                                       READY   STATUS    RESTARTS      AGE
calico-kube-controllers-66966888c4-kg7bk   1/1     Running   0             10m
calico-node-2pqng                          1/1     Running   0             10m
calico-node-j7g7w                          1/1     Running   0             10m
calico-node-k5xh7                          1/1     Running   0             10m
calico-node-n7bsr                          1/1     Running   0             10m
calico-node-p9b6l                          1/1     Running   0             10m
coredns-65c54cc984-mtgxm                   1/1     Running   0             22m
coredns-65c54cc984-szn5g                   1/1     Running   0             22m
etcd-master01                              1/1     Running   0             22m
etcd-master02                              1/1     Running   0             12m
etcd-master03                              1/1     Running   0             11m
kube-apiserver-master01                    1/1     Running   0             22m
kube-apiserver-master02                    1/1     Running   0             12m
kube-apiserver-master03                    1/1     Running   0             11m
kube-controller-manager-master01           1/1     Running   4 (12m ago)   22m
kube-controller-manager-master02           1/1     Running   0             12m
kube-controller-manager-master03           1/1     Running   0             11m
kube-proxy-478r8                           1/1     Running   0             22m
kube-proxy-6b7bm                           1/1     Running   0             11m
kube-proxy-ggvtp                           1/1     Running   0             19m
kube-proxy-hxw6h                           1/1     Running   0             12m
kube-proxy-q74qm                           1/1     Running   0             19m
kube-scheduler-master01                    1/1     Running   4 (12m ago)   22m
kube-scheduler-master02                    1/1     Running   0             12m
kube-scheduler-master03                    1/1     Running   0             11m

查看集群节点状态是否为Ready

[root@master01 ~]# kubectl get nodes
NAME       STATUS   ROLES                  AGE   VERSION
master01   Ready    control-plane,master   22m   v1.23.0
master02   Ready    control-plane,master   12m   v1.23.0
master03   Ready    control-plane,master   12m   v1.23.0
node01     Ready    <none>                 20m   v1.23.0
node02     Ready    <none>                 20m   v1.23.0

部署Nginx测试集群是否正常

在master01节点部署Nginx

[root@master01 ~]# vim nginx.yml
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.20.2
    ports:
    - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
spec:
  type: NodePort
  selector:
    app: nginx
  ports:
  - port: 80
    targetPort: 80
    nodePort: 30002

创建Pod

kubectl apply -f nginx.yml

等待Pod状态为Running

[root@master01 ~]# kubectl get pod
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          2m48s

查看Service的NodePort端口

[root@master01 ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        34m
nginx-svc    NodePort    10.101.101.19   <none>        80:30002/TCP   3m3s

此时可以访问集群任何主机IP:30002端口

验证成功后,将其删除掉,避免和后续的部署过程造成不必要的麻烦。

[root@master01 ~]# kubectl delete -f nginx.yml

标签:k8s,kubernetes,Kubernetes,CentOS7,Running,集群,kube,节点
From: https://blog.csdn.net/Lzcsfg/article/details/141276804

相关文章

  • 8.Centos7停止维护问题
    1.Centos切换镜像源1.打开配置yum所在文件,CentOS-Base.repovi/etc/yum.repos.d/CentOS-Base.repo2.将CentOS-Base.repo里的内容全部替换为以下内容#CentOS-Base.repo[base]name=CentOS-$releasever-Basebaseurl=http://mirrors.aliyun.com/centos/$releasever/......
  • 05--kubernetes组件与安装
    前言:终于写到kubernetes(k8s),容器编排工具不止k8s一个,它的优势在于搭建集群,也是传统运维和云计算运维的第一道门槛,这里会列出两种安装方式,详细步骤会在下文列出,文章很长,根据目录取用。1、kubernetes基础名词官网地址:Kubernetes中文网地址:Kubernetes中文网官网一个简单的k8s......
  • DolphinScheduler集群部署问题(趟坑)总结
    目录官方文档官方项目地址问题解决官方文档DolphinScheduler|文档中心(apache.org)官方项目地址部署及使用过程中的问题可以参见项目Issue:Issues·apache/dolphinscheduler·GitHubGitHub-apache/dolphinschedulerat3.2.2-release问题解决1、JVM在运......
  • k8s集群
    环境初始化#重命名[root@localhost~]#hostnamectlset-hostnamemaster1[root@localhost~]#susu#配置静态IP[root@master1~]#cd/etc/sysconfig/network-scripts/[root@master1network-scripts]#vimifcfg-ens33BOOTPROTO="none"NAME="ens33"DEV......
  • 通过Rancher管理Kubernetes 集群
    目录1.Rancher2.Rancher安装及配置2.1安装rancher2.2 rancher的浏览器使用1.RancherRancher是一个开源的企业级多集群Kubernetes管理平台,实现了Kubernetes集群在混合云+本地数据中心的集中部署与管理,以确保集群的安全性,加速企业数字化转型。超过40000家企......
  • etcd集群部署
    etcd集群部署一、环境准备1、准备3台服务器。 操作系统IP地址主机名CentOS7.9192.168.110.12etcd1CentOS7.9192.168.110.13etcd2CentOS7.9192.168.110.15etcd3 2、配置3台服务器hosts。(3个节点相同操作)vim/etc/hosts192.168.110......
  • centos7系统msyqldump 客户端安装
    https://dev.mysql.com/downloads/ 因为我是下载mysql5.7要在归档包里查找 选择对应的安装版本: 下载如下rpm包,下载地址:https://downloads.mysql.com/archives/community/mysql-community-common-5.7.20-1.el7.x86_64.rpmmysql-community-libs-5.7.20-1.el7.x86_64.......
  • MySQL-主主模式集群部署
    目录一、简介什么是双主复制二、服务器规划三、安装MySQL1.下载安装包1.1关闭防火墙2.创建相关目录3.配置环境变量4.初始化数据库A4.1设置环境变量4.2初始化配置文件4.3初始化数据目录4.4配置启动脚本4.5启动MYSQL4.6设置root密码4.7允许root远程登录5.初始化数据库B5.1......
  • 【私有云场景案例分享①】高效的集群管理能力
    此文章来源于项目官方公众号:“AirtestProject”版权声明:允许转载,但转载必须保留原链接;请勿用作商业或者非法用途一、前言设备的管理对企业至关重要,会影响生产效率、成本控制和竞争力。然而,企业在设备管理上面临设备数量多、设备分布广、维护成本高等挑战。DeviceKeeper设备管......
  • Kubernetes中Pod间通信的详细解析
    目录同一个节点中Pod通信原理网络拓扑结构通信过程不同节点上的Pod通信原理网络拓扑结构通信过程同一个节点中Pod通信原理网络拓扑结构Pod:每个Pod都有一个唯一的IP地址(例如,172.16.3.2和172.16.3.3)。Pod内部的网络接口(eth0)连接到一个虚拟网络设备(veth)。虚拟网络设备(vethp......