Kubernetes 1.27 版本基于(haproxy+keepalived)部署高可用集群

news2024/9/30 21:31:24

Kubernetes 1.27 版本基于(haproxy+keepalived)部署高可用集群

    • 二、系统架构
      • 2.1 架构基本需求
      • 2.2 架构图
    • 三、环境准备
      • 3.1 云服务或虚拟机清单
      • 3.2 升级操作系统内核
      • 3.3 设置hostname
      • 3.4 修改hosts文件映射(注意替换你的规划每一台机器的IP)
      • 3.5 关闭防火墙
      • 3.6 禁用swap分区
      • 3.7 关闭selinux
      • 3.8 时间同步
      • 3.9 添加网桥过滤及内核转发配置文件
      • 3.10 安装ipset及ipvsadm
      • 3.11 配置ssh免密登录(master01执行)
    • 四、部署etcd集群(master节点执行)
      • 4.1 安装etcd
      • 4.2 生成etcd配置相关文件(master01)
      • 4.3 启动etcd
    • 五、安装负载均衡器 haproxy + keepalived(master节点执行)
      • 5.1 haproxy+keepalived高可用负载均衡原理
      • 5.2 开始安装keepalived 和 haproxy
      • 5.3 配置 haproxy
        • 5.3.1 创建haproxy配置文件
      • 5.4 配置keepalived
        • 5.4.1 创建keepalived配置文件(master01)
        • 5.4.2 创建keepalived配置文件(master02)
        • 5.4.3 创建keepalived配置文件(master03)
        • 5.4.4 健康检查脚本
      • 5.6 启动keepalived+haproxy服务并验证
      • 六、安装docker(所有节点执行)
        • 6.1 安装
        • 6.2 配置docker
        • 6.3 启动docker
    • 七、安装cri-dockerd(所有节点执行)
      • 7.1 下载cri-dockerd并安装cri-dockerd
      • 7.2 配置cri-dockerd
      • 7.3 重启cri-dockerd
    • 八、安装k8s集群
      • 8.1配置国内yum源(所有节点)
      • 8.2 安装kubeadm、kubectl、kubelet(所有节点)
      • 8.3 配置kubelet(所有节点)
      • 8.4 准备镜像 (所有节点)
        • 安装初始化k8s节点 (master01)
      • 8.5 复制证书至其他master节点加入集群 (从master01节点到02,03节点)
      • 8.6 删除多余证书,并加入集群(02、03)
      • 8.7 加入集群(02、03)
      • 8.8 检查验证集群状态(master01)
      • 8.9 worker节点加入集群(worker01)
      • 九、安装网络插件Calico
      • 9.1 设置GitHub加速
      • 9.2 部署Calico(3.26.0版本)
        • 9.2.1 提前准备Calico镜像 (所有节点都需要准备)
        • 9.2.2 部署Calico网络插件(master01节点)
    • 十、创建服务
      • 10.1 创建Nginx测试服务

二、系统架构

2.1 架构基本需求

  • 配置三台机器 kubeadm 的最低要求 给主节点
  • 配置三台机器 kubeadm 的最低要求 给工作节点
  • 在集群中,所有计算机之间的完全网络连接(公网或私网)
  • 所有机器上的 sudo 权限
  • 每台设备对系统中所有节点的 SSH 访问
  • 在所有机器上安装 kubeadm 和 kubelet,kubectl 是可选的。

2.2 架构图

在这里插入图片描述

三、环境准备

3.1 云服务或虚拟机清单

准备4台,2G或更大内存,2核或以上CPU,30G以上硬盘 物理机或云主机或虚拟机 2、系统centos 7.x

服务器主机名IP最低配置
虚拟机master0110.211.55.132C2G
虚拟机master0210.211.55.142C2G
虚拟机master0310.211.55.152C2G
虚拟机worker0110.211.55.162C2G

3.2 升级操作系统内核

# 导入elrepo gpg key
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
 
# 安装elrepo yum源仓库
yum -y install https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm
 
# 安装kernel-lt版本,ml为长期稳定版本,lt为长期维护版本
yum --enablerepo="elrepo-kernel" -y install kernel-lt.x86_64
 
# 设置grub2默认引导为0
grub2-set-default 0
 
# 重新生成grub2引导文件
grub2-mkconfig -o /boot/grub2/grub.cfg
 
# 重启
reboot

3.3 设置hostname

配置各个虚拟机的hostname,确保集群各个虚拟机的hostname不一样。

#根据规划设置主机名
#master01节点执行
hostnamectl set-hostname master01
#master02节点执行
hostnamectl set-hostname master02
#master03节点执行
hostnamectl set-hostname master03
#worker01节点执行
hostnamectl set-hostname worker01

3.4 修改hosts文件映射(注意替换你的规划每一台机器的IP)

给所有主机添加hosts文件内容,使其能互相通过主机名访问。

#在所有机器上执行
cat >> /etc/hosts << EOF
10.211.55.12     vip
10.211.55.13    master01
10.211.55.14    master02
10.211.55.15    master03
10.211.55.16    worker01
EOF

3.5 关闭防火墙

这里简单直接关闭防火墙

#关闭防火墙 
systemctl stop firewalld && systemctl disable firewalld

3.6 禁用swap分区

kubernetes的想法是将实例紧密包装到尽可能接近100%。 所有的部署应该与CPU /内存限制固定在一起。 所以如果调度程序发送一个pod到一台机器,它不应该使用交换。 设计者不想交换,因为它会减慢速度,关闭swap主要是为了性能考虑。

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

3.7 关闭selinux

关于selinux的原因(关闭selinux以允许容器访问宿主机的文件系统)

#关闭
selinux sed -i 's/enforcing/disabled/' /etc/selinux/config && setenforce 0

3.8 时间同步

同步pod和宿主机时区

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

3.9 添加网桥过滤及内核转发配置文件

# 创建k8s.conf文件
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
vm.swappiness = 0
EOF

# 加载br_netfilter模块
modprobe br_netfilter

# 使配置生效
sysctl -p /etc/sysctl.d/k8s.conf

# 查看是否加载
lsmod | grep br_netfilter

3.10 安装ipset及ipvsadm

# 安装ipset及ipvsadm
yum -y install ipset ipvsadm
 
# 配置ipvsadm模块加载方式,添加需要加载的模块
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF
 
# 授权、运行、检查加载
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack

3.11 配置ssh免密登录(master01执行)

ssh-keygen
 
# 然后一直回车

拷贝密钥文件至其他服务器

# 进入/root/.ssh
cd /root/.ssh
 
# 查看文件
ls
 
# 复制文件并重命名
cp id_rsa.pub authorized_keys
 
# 拷贝至其他服务器
for i in 14 15 16
do
scp -r /root/.ssh 10.211.55.$i:/root/
done

四、部署etcd集群(master节点执行)

4.1 安装etcd

# 安装etcd
yum -y install etcd

4.2 生成etcd配置相关文件(master01)

# 创建文件
vim etcd_install.sh
 
# 粘贴以下内容
etcd1=10.211.55.13
etcd2=10.211.55.14
etcd3=10.211.55.15
 
TOKEN=smartgo
ETCDHOSTS=($etcd1 $etcd2 $etcd3)
NAMES=("master01" "master02" "master03")
for i in "${!ETCDHOSTS[@]}"; do
HOST=${ETCDHOSTS[$i]}
NAME=${NAMES[$i]}
cat << EOF > /tmp/$NAME.conf
# [member]
ETCD_NAME=$NAME
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://$HOST:2380"
ETCD_LISTEN_CLIENT_URLS="http://$HOST:2379,http://127.0.0.1:2379"
#[cluster]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://$HOST:2380"
ETCD_INITIAL_CLUSTER="${NAMES[0]}=http://${ETCDHOSTS[0]}:2380,${NAMES[1]}=http://${ETCDHOSTS[1]}:2380,${NAMES[2]}=http://${ETCDHOSTS[2]}:2380"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="$TOKEN"
ETCD_ADVERTISE_CLIENT_URLS="http://$HOST:2379"
EOF
done
ls /tmp/master*
scp /tmp/master02.conf $etcd2:/etc/etcd/etcd.conf
scp /tmp/master03.conf $etcd3:/etc/etcd/etcd.conf
cp /tmp/master02.conf /etc/etcd/etcd.conf
rm -f /tmp/master*.conf
 
 
# 执行脚本文件
sh  etcd_install.sh

4.3 启动etcd

# 启动etcd
systemctl enable --now etcd

检查etcd是否正常

etcdctl member list

在这里插入图片描述

etcdctl cluster-health

在这里插入图片描述

五、安装负载均衡器 haproxy + keepalived(master节点执行)

5.1 haproxy+keepalived高可用负载均衡原理

在两台Haproxy的主机上分别运行着一个Keepalived实例,这两个Keepalived争抢同一个虚IP地址,两个Haproxy也尝试去绑定这同一个虚IP地址上的端口。显然,同时只能有一个Keepalived抢到这个虚IP,抢到了这个虚IP的Keepalived主机上的Haproxy便是当前的MASTER。Keepalived内部维护一个权重值,权重值最高的Keepalived实例能够抢到虚IP。同时Keepalived会定期check本主机上的HAProxy状态,状态OK时权重值增加。

5.2 开始安装keepalived 和 haproxy

在三台master集群节点上安装高可用负载均衡组件keepalived和 haproxy 。

#安装keepalived 和 haproxy
yum install haproxy keepalived -y

5.3 配置 haproxy

首先我们先把原始的haproxy配置都统一备份一下,以便后续操作。在/etc/haproxy目录创建haproxy.cfg文件。

5.3.1 创建haproxy配置文件

cat > /etc/haproxy/haproxy.cfg << EOF
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
    # to have these messages end up in /var/log/haproxy.log you will
    # need to:
    # 1) configure syslog to accept network log events.  This is done
    #    by adding the '-r' option to the SYSLOGD_OPTIONS in
    #    /etc/sysconfig/syslog
    # 2) configure local2 events to go to the /var/log/haproxy.log
    #   file. A line like the following can be added to
    #   /etc/sysconfig/syslog
    #
    #    local2.*                       /var/log/haproxy.log
    #
    log         127.0.0.1 local2
    
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon 
       
    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------  
defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000
#---------------------------------------------------------------------
# kubernetes apiserver frontend which proxys to the backends
#--------------------------------------------------------------------- 
frontend kubernetes-apiserver
    mode                 tcp
    bind                 *:16443
    option               tcplog
    default_backend      kubernetes-apiserver    
#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend kubernetes-apiserver
    mode        tcp
    balance     roundrobin
    server      master01   10.211.55.13:6443 check
    server      master02   10.211.55.14:6443 check
    server      master03   10.211.55.15:6443 check
#---------------------------------------------------------------------
# collection haproxy statistics message
#---------------------------------------------------------------------
listen stats
    bind                 *:1080
    stats auth           admin:awesomePassword
    stats refresh        5s
    stats realm          HAProxy\ Statistics
    stats uri            /admin?stats
EOF

5.4 配置keepalived

首先我们先把原始的keepalived配置都统一备份一下,以便后续操作。然后我们在/etc/keepalived/目录新建keepalived.conf文件和check_apiserver.sh

5.4.1 创建keepalived配置文件(master01)

cat > /etc/keepalived/keepalived.conf <<EOF 
 ! Configuration File for keepalived
 global_defs {
    router_id LVS_DEVEL
 script_user root
    enable_script_security
 }
 vrrp_script chk_apiserver {
    script "/etc/keepalived/check_apiserver.sh"
    interval 5
    weight -5
    fall 2 
 rise 1
 }
 vrrp_instance VI_1 {
    state MASTER
    interface eth0 #注意修改网卡
    mcast_src_ip 10.211.55.13 #注意修改IP
    virtual_router_id 51
    priority 100
    advert_int 2
    authentication {
        auth_type PASS
        auth_pass K8SHA_KA_AUTH
    }
    virtual_ipaddress {
        10.211.55.12 #注意修改虚拟IP
    }
    track_script {
       chk_apiserver
    }
 }
EOF

5.4.2 创建keepalived配置文件(master02)

cat > /etc/keepalived/keepalived.conf <<EOF 
 ! Configuration File for keepalived
 global_defs {
    router_id LVS_DEVEL
 script_user root
    enable_script_security
 }
 vrrp_script chk_apiserver {
    script "/etc/keepalived/check_apiserver.sh"
   interval 5
    weight -5
    fall 2 
 rise 1
 }
 vrrp_instance VI_1 {
    state BACKUP
    interface eth0 #注意修改网卡
    mcast_src_ip 10.211.55.14 #注意修改IP
    virtual_router_id 51
    priority 99
    advert_int 2
    authentication {
        auth_type PASS
        auth_pass K8SHA_KA_AUTH
    }
    virtual_ipaddress {
        10.211.55.12 #注意修改虚拟IP
    }
    track_script {
       chk_apiserver
    }
 }
EOF

5.4.3 创建keepalived配置文件(master03)

 ! Configuration File for keepalived
 global_defs {
    router_id LVS_DEVEL
 script_user root
    enable_script_security
 }
 vrrp_script chk_apiserver {
    script "/etc/keepalived/check_apiserver.sh"
   interval 5
    weight -5
    fall 2 
 rise 1
 }
 vrrp_instance VI_1 {
    state BACKUP
    interface eth0 #注意修改网卡
    mcast_src_ip 10.211.55.15 #注意修改IP
    virtual_router_id 51
    priority 99
    advert_int 2
    authentication {
        auth_type PASS
        auth_pass K8SHA_KA_AUTH
    }
    virtual_ipaddress {
        10.211.55.12 #注意修改虚拟IP
    }
    track_script {
       chk_apiserver
    }
 }

5.4.4 健康检查脚本

cat > /etc/keepalived/check_apiserver.sh <<"EOF"
 #!/bin/bash
 err=0
 for k in $(seq 1 3)
 do
    check_code=$(pgrep haproxy)
    if [[ $check_code == "" ]]; then
        err=$(expr $err + 1)
        sleep 1
        continue
    else
        err=0
        break
    fi
 done
 
 if [[ $err != "0" ]]; then
    echo "systemctl stop keepalived"
    /usr/bin/systemctl stop keepalived
    exit 1
 else
    exit 0
 fi
EOF
 
 
# 授权
chmod +x /etc/keepalived/check_apiserver.sh

5.6 启动keepalived+haproxy服务并验证

# 启动
systemctl daemon-reload && systemctl enable --now haproxy && systemctl enable --now keepalived
 
# 验证
ip address show

在这里插入图片描述

六、安装docker(所有节点执行)

6.1 安装

#下载yum源
yum -y install wget &&  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

6.2 配置docker

其中"exec-opts": [“native.cgroupdriver=systemd”]为cgroup方式

 cat > /etc/docker/daemon.json << EOF
{
  "registry-mirrors": "registry-mirrors": [
         "https://ebkn7ykm.mirror.aliyuncs.com",
         "https://docker.mirrors.ustc.edu.cn",
         "http://f1361db2.m.daocloud.io",
         "https://registry.docker-cn.com",
         "http://hub-mirror.c.163.com",
         "https://registry.cn-hangzhou.aliyuncs.com"
     ],
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

6.3 启动docker

sudo systemctl daemon-reload && sudo systemctl restart docker

七、安装cri-dockerd(所有节点执行)

7.1 下载cri-dockerd并安装cri-dockerd

# 创建文件夹
mkdir /data/cri-dockerd -p
cd /data/cri-dockerd

#下载cri-dockerd rpm包
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.3/cri-dockerd-0.3.3-3.el7.x86_64.rpm
# 安装cri-dockerd
yum install -y cri-dockerd-0.3.3-3.el7.x86_64.rpm 

7.2 配置cri-dockerd

# 修改配置文件
vim /usr/lib/systemd/system/cri-docker.service
 
# 第10行改为
ExecStart=/usr/bin/cri-dockerd --pod-infra-container-image=registry.k8s.io/pause:3.9 --container-runtime-endpoint fd://

在这里插入图片描述

7.3 重启cri-dockerd

# 重启
systemctl start cri-docker && systemctl enable cri-docker

八、安装k8s集群

8.1配置国内yum源(所有节点)

cat > /etc/yum.repos.d/k8s.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

8.2 安装kubeadm、kubectl、kubelet(所有节点)

# 安装指定版本
yum -y install  kubeadm-1.27.2-0  kubelet-1.27.2-0 kubectl-1.27.2-0

8.3 配置kubelet(所有节点)

vim /etc/sysconfig/kubelet

# 删除原有内容,填入以下内容
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"

# kubelet开机启动
systemctl enable kubelet

在这里插入图片描述

8.4 准备镜像 (所有节点)

由于国外镜像被墙,需要魔法才能获取,所以这边没有使用魔法,直接从国内下载后重新命名方式准备镜像

cat >> alik8simages.sh << EOF
#!/bin/bash
list='kube-apiserver:v1.27.2
kube-controller-manager:v1.27.2
kube-scheduler:v1.27.2
kube-proxy:v1.27.2
pause:3.9
coredns/coredns:v1.10.1
etcd:3.5.7-0'
for item in ${list}
  do
 
    docker pull registry.aliyuncs.com/google_containers/$item && docker tag registry.aliyuncs.com/google_containers/$item registry.k8s.io/$item && docker rmi registry.aliyuncs.com/google_containers/$item

  done
EOF

在这里插入图片描述

安装初始化k8s节点 (master01)

---
apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 10.211.55.13 #节点IP
  bindPort: 6443
nodeRegistration:
  criSocket: unix:///var/run/cri-dockerd.sock
---
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: 1.27.2
networking:
  dnsDomain: cluster.local
  podSubnet: 10.244.0.0/16
  serviceSubnet: 10.96.0.0/12
scheduler: {}
apiServerCertSANs:
- 10.211.55.12
controlPlaneEndpoint: "10.211.55.12:16443" #虚拟IP
etcd:
  external:
    endpoints: #etcd 集群地址
      - http://10.211.55.13:2379
      - http://10.211.55.14:2379
      - http://10.211.55.15:2379
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
---
apiVersion: kubelet.config.k8s.io/v1beta1
authentication:
  anonymous:
    enabled: false
  webhook:
    cacheTTL: 0s
    enabled: true
  x509:
    clientCAFile: /etc/kubernetes/pki/ca.crt
authorization:
  mode: Webhook
  webhook:
    cacheAuthorizedTTL: 0s
    cacheUnauthorizedTTL: 0s
cgroupDriver: systemd
clusterDNS:
- 10.96.0.10
clusterDomain: cluster.local
cpuManagerReconcilePeriod: 0s
evictionPressureTransitionPeriod: 0s
fileCheckFrequency: 0s
healthzBindAddress: 127.0.0.1
healthzPort: 10248
httpCheckFrequency: 0s
imageMinimumGCAge: 0s
kind: KubeletConfiguration
logging:
  flushFrequency: 0
  options:
    json:
      infoBufferSize: "0"
  verbosity: 0
memorySwap: {}
nodeStatusReportFrequency: 0s
nodeStatusUpdateFrequency: 0s
rotateCertificates: true
runtimeRequestTimeout: 0s
shutdownGracePeriod: 0s
shutdownGracePeriodCriticalPods: 0s
staticPodPath: /etc/kubernetes/manifests
streamingConnectionIdleTimeout: 0s
syncFrequency: 0s
volumeStatsAggPeriod: 0s

执行下面命令初始化

#初始化
kubeadm init --config kubeadm-config.yaml --upload-certs --v=9

执行初始化完成后输出如下视为成功,需要保存以下内容进行后面集群join操作

To start using your cluster, you need to run the following as a regular user:

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

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

You can now join any number of the control-plane node running the following command on each as root:

  kubeadm join 10.211.55.12:16443 --token abcdef.0123456789abcdef \
        --discovery-token-ca-cert-hash sha256:5d53d0f711115fbc37817eeca72b1399a28d85ecd787c0660e74465a82293319 \
        --control-plane --certificate-key 657a0df9aa44419ea3267fc5cbfc644a7889a7e4ecdc87663be87e774f09c976 \
        --cri-socket unix://var/run/cri-dockerd.sock


Please note that the certificate-key gives access to cluster sensitive data, keep it secret!
As a safeguard, uploaded-certs will be deleted in two hours; If necessary, you can use
"kubeadm init phase upload-certs --upload-certs" to reload certs afterward.

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 10.211.55.12:16443 --token abcdef.0123456789abcdef \
        --discovery-token-ca-cert-hash sha256:5d53d0f711115fbc37817eeca72b1399a28d85ecd787c0660e74465a82293319 \
        --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

8.5 复制证书至其他master节点加入集群 (从master01节点到02,03节点)

# master01执行
# 复制证书至其他master节点
 
vim cp-k8s-cert.sh
 
# 贴入以下内容
for host in 14 15; do
    scp -r /etc/kubernetes/pki 10.211.55.$host:/etc/kubernetes/
done
 
 
# 执行脚本
sh cp-k8s-cert.sh

8.6 删除多余证书,并加入集群(02、03)

# master02、master03执行
 
cd /etc/kubernetes/pki/
rm -rf api*
rm -rf front-proxy-client.*
 
ls

8.7 加入集群(02、03)

注意:如果不加最后的–cri-socket unix://var/run/cri-dockerd.sock,会报错

这里需要使用你01节点初始化成功后的命令,以下是我集群的,需要注意注意!!!

kubeadm join 10.211.55.12:16443 --token abcdef.0123456789abcdef \
        --discovery-token-ca-cert-hash sha256:5d53d0f711115fbc37817eeca72b1399a28d85ecd787c0660e74465a82293319 \
        --control-plane --certificate-key 657a0df9aa44419ea3267fc5cbfc644a7889a7e4ecdc87663be87e774f09c976 \
        --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

8.8 检查验证集群状态(master01)

kubectl get pods -n kube-system

在这里插入图片描述

8.9 worker节点加入集群(worker01)

kubeadm join 10.211.55.12:16443 --token abcdef.0123456789abcdef \
        --discovery-token-ca-cert-hash sha256:5d53d0f711115fbc37817eeca72b1399a28d85ecd787c0660e74465a82293319 \
        --cri-socket unix://var/run/cri-dockerd.sock

通过下面命令查询是否正常加入集群

kubectl get nodes

九、安装网络插件Calico

9.1 设置GitHub加速

# 获取github地址
 ping raw.githubusercontent.com
# 64 bytes from raw.githubusercontent.com (185.199.108.133): icmp_seq=2 ttl=128 time=271 ms
# 修改 /etc/hosts
 
vim /etc/hosts
 
# 添加
185.199.108.133 raw.githubusercontent.com

9.2 部署Calico(3.26.0版本)

9.2.1 提前准备Calico镜像 (所有节点都需要准备)

下载calico镜像包

#下载
wget https://github.com/projectcalico/calico/releases/download/v3.26.0/release-v3.26.0.tgz
#解压
tar zxvf  release-v3.26.0.tgz
#进入镜像
cd release-v3.26.0/images
#加载镜像
docker load -i calico-cni.tar && docker load -i calico-dikastes.tar && docker load -i calico-flannel-migration-controller.tar && docker load -i calico-kube-controllers.tar  && docker load -i calico-node.tar  && docker load -i calico-pod2daemon.tar && docker load -i calico-typha.tar

所有节点准备镜像后是如下图:

在这里插入图片描述

9.2.2 部署Calico网络插件(master01节点)

# 复制安装命令
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.0/manifests/tigera-operator.yaml

下载配置文件并修改配置文件

# 下载配置文件
wget  https://raw.githubusercontent.com/projectcalico/calico/v3.26.0/manifests/custom-resources.yaml
 
# 修改配置文件
vim custom-resources.yaml

修改配置文件中第13行cidr,与6.5配置文件 kubeadm-config.yaml 中的 podSubnet 想同

在这里插入图片描述

修改保存后执行配置文件

# 执行配置文件
kubectl create -f custom-resources.yaml

部署完成后我们查询node集群状态:

kubectl get nodes

在这里插入图片描述

查看所有pod运行状态:

kubectl get po -A -owide

在这里插入图片描述

等所有pod运行正常后,我们就可以开始部署你想要的服务啦。

十、创建服务

10.1 创建Nginx测试服务

#创建pod
kubectl create deployment nginx  --image=nginx:1.14-alpine 
#创建service
kubectl expose deploy nginx  --port=80 --target-port=80  --type=NodePort

查看我们创建的nginx服务:

kubectl get svc -n default

在这里插入图片描述

访问地址:http://10.211.55.13:32173
在这里插入图片描述

以上过程是安装最新版的k8s高可用集群。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/711087.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

泛型深入~

1&#xff1a;泛型的概述的优势 2&#xff1a;泛型的好处 2&#xff1a;自定义泛型类 2&#xff1a;泛型类的原理 把出现泛型变量的地方全部替换成传输的真实数据类型 3&#xff1a;自定义泛型方法 4&#xff1a;自定义泛型接口 5&#xff1a;泛型通配符&#xff0c;上下限

03-1_Qt 5.9 C++开发指南_Qt核心特点(元对象系统特性:属性系统;信号与槽机制、动态类型转换;元对象特性测试实例)

Qt 是一个用标准 C编写的跨平台开发类库&#xff0c;它对标准 C进行了扩展&#xff0c;引入了元对象系统信号与槽、属性等特性&#xff0c;使应用程序的开发变得更高效。本章将介绍 Qt 的这些核心特点&#xff0c;对于理解和编写高效的 Ot C程序是大有帮助的&#xff1b;还介绍…

Servlet 项目创建和部署

目录 创建步骤&#xff1a; 1.创建项目 ​编辑2. 引入依赖 3.创建目录&#xff0c;复制内容 4.编写代码 5.打包 6.部署 7.验证 简化: 常见报错情况&#xff1a; 1.端口占用 2.路径错误 3.405 4.500 服务器代码抛出异常 5.依赖没下载好 创建步骤&#xff1a; 1.…

标注一致性计算

在统计学中&#xff0c;标注一致性&#xff08;Inter-annotation agreement, IAA&#xff09;用于评价独立观察者之间对同一现象进行评估时的一致程度。因此&#xff0c;本文讨论最多的是多位标注员对相同数据进行标注时的一致性评估方法。 一、Kappa统计量 评估一致性最简单…

Mysql高级篇(面试必看)

Mysql高级篇知识点&#xff0c;全篇手打&#xff0c;大家觉得有用的话点一个赞&#xff0c;持续更新 目录 1.Mysql锁的机制&#xff1a;粒度分类&#xff0c;思想分类&#xff0c;实现分类&#xff0c;状态分类&#xff0c;算法分类 2.Mysql的隔离级别&#xff1a;读未提交&…

视觉SLAM学习路线思维导图

整理了一下视觉SLAM学习路线的思维导图&#xff0c;防遗忘&#xff0c;不足的地方也希望各路大神能够不吝赐教。

Nginx(2)静态资源部署

静态资源 静态资源的配置指令静态资源优化配置静态资源压缩Gzip模块配置指令Gzip压缩功能的实例Gzip和sendfile共存问题gzip_static测试使用 静态资源的缓存处理浏览器缓存相关指令 Nginx的跨域问题解决静态资源防盗链防盗链的实现原理防盗链的具体实现 上网搜索访问资源是通过…

Java15——枚举类、注解、作业

1. 枚举类 跳了很多。。。 2. 注解 3. 作业 1. 注意&#xff1a;所有类共享静态属性 所以结果是 9&#xff0c;red 100&#xff0c;red package com.zsq.homework1;public class HM1 {public static void main(String[] args) {Cellphone cellphone new Cellphone();cel…

Java面试题大全(23年整理版)最新全面技巧讲解

程序员面试背八股&#xff0c;可以说是现在互联网开发岗招聘不可逆的形式了&#xff0c;其中最卷的当属 Java&#xff01;&#xff08;网上动不动就是成千上百道的面试题总结&#xff09;你要是都能啃下来&#xff0c;平时技术不是太差的话&#xff0c;面试基本上问题就不会太大…

如何在 MATLAB 中进行图像分割(matlab仿真与图像处理系列第7期)

在 MATLAB 中进行图像分割有多种方法,下面介绍一些常用的方法: 基于阈值的二值化分割这是一种最简单的分割方法,将图像分为两个部分:背景和前景。其主要思想是,选择一个阈值,将图像中的像素值与阈值进行比较,将像素值大于阈值的像素标记为前景(白色),将像素值小于阈值…

自动化测试练手项目推荐

最近收到许多自学自动化测试的小伙伴私信&#xff0c;学习了理论知识后&#xff0c;却没有合适的练手项目。 测试本身是一个技术岗位&#xff0c;如果只知道理论&#xff0c;没有实战经验&#xff0c;在面试中很难说服面试官&#xff0c;比如什么场景下需要添加显示等待&#x…

小白用旧手机搭建web服务器(一):实现局域网访问

1、首先要拥有一部安卓手机 2、下载ksweb 我们需要下载ksweb这款app&#xff0c;这是一位俄罗斯大神制作的&#xff0c;里面集成了Lighttpd、nginx、Apache的服务器&#xff0c;还有mysql服务器等&#xff0c;十分强大。 下载地址&#xff1a;KSWEB_3-93_kill_无ad.apk - 蓝…

大数据技术生态体系

6 大数据技术生态体系 图中涉及的技术名词解释如下: 1)Sqoop:Sqoop 是一款开源的工具,主要用于在 Hadoop、Hive 与传统的数据库(MySQL)间进行数据的传递,可以将一个关系型数据库(例如 :MySQL,Oracle 等)中的数据导进到 Hadoop 的 HDFS 中,也可以将 HDFS 的数据导进…

GPIO复用功能1——定时器输入捕获

文章目录 前言定时器输入捕获红外接收的数据分析捕获思路编程实践1.初始化时钟2.初始化GPIO3.配置定时器的时钟基准4.配置输入捕获参数5.中断配置6.中断服务函数7.处理数据帧 实现效果 总结 前言 前面介绍了GPIO的通用输入输出功能&#xff0c;以及其模拟时序的功能&#xff0c…

软件模拟实现SPI通信-GD32

软件模拟实现SPI通信-GD32 设计流程 #ifndef _SOFT_SPI_H #define _SOFT_SPI_H /** filename: soft_spi.h**/ #include "gd32f10x.h" #include "systick.h"//定义表示具体IO口的资源宏 #define SPI_PORT GPIOA #define SPI_MOSI GPIO_PIN_7 #define SP…

【华为OD机试】翻转骰子(python, java, c++, js)

翻转骰子 前言:本专栏将持续更新华为OD机试题目,并进行详细的分析与解答,包含完整的代码实现,希望可以帮助到正在努力的你。关于OD机试流程、面经、面试指导等,如有任何疑问,欢迎联系我,wechat:steven_moda;email:nansun0903@163.com;备注:CSDN。 题目描述 骰子是…

java中的knife4j、Swagger配置过程详解

knife4j的配置过程如下&#xff1a; 1、首先引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId> </dependency> <dependency><groupId>com.github…

CentOS Linux的替代品(四)_openEuler 22.03-LTS基础安装教程

文章目录 1 openEuler 22.03-LTS简介1.1 系统安装1.1.1 发布件1.1.2 最小硬件要求1.1.3 硬件兼容性 1.2 关键特性1.2.1 openEuler 22.03-LTS基于 Linux Kernel 5.10内核构建, 在进程调度、内存管理等方面带来10余处创新1.2.2 新介质文件系统1.2.3 内存分级扩展1.2.4 用户态协议…

Clouder Manager日常管理及使用

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

低代码:解放生产力的利器还是一场空洞的炒作?

低代码有人说是毒瘤&#xff0c;也有人说是银弹。到底应该怎么看呢&#xff1f;存在即合理。 “存在”包括两个角度&#xff1a; 银弹论毒瘤论 无论从哪个角度看&#xff0c;既然存在这样的论调&#xff0c;就有它们的合理性。 先把关注点移到低代码本身&#xff0c;低代码…