kubeadm部署高可用kubernetes

在欧拉系统上用Kubeadm方式部署(k8s)kubernetes多master高可用集群 1.1 Kubernetes高可用集群部署1.1.1 集群架构1. 高可用拓扑可以设置 HA 集群:使用堆叠(stacked)控制平面节点,其中 etcd 节点与控制平面节点共存;使用外部 etcd 节点,其中 etcd 在与控制平面不同的节点上运行;在设置 HA 集群之前,应该仔细考虑每种拓扑的优缺点。2. 堆叠(Stacked) etcd 拓扑主要特点:etcd 分布式数据存储集群堆叠在 kubeadm 管理的控制平面节点上,作为控制平面的一个组件运行。 阅读详情

1 准备环境(所有主机执行)

1.1 主机列表

cat >> /etc/hosts <<EOF
192.168.3.71   k8s-master01
192.168.3.72   k8s-master02
192.168.3.73   k8s-master03
192.168.3.74   k8s-worker01
192.168.3.75   k8s-worker02
192.168.3.76   k8s-worker03
192.168.3.77   k8s-worker04
EOF

1.2 关闭防火墙

systemctl disable firewalld --now

1.3 关闭selinux

setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

1.4 关闭swap分区

swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

1.5 升级内核

(1)更新yum源仓库

yum -y update

(2)启用 ELRepo 仓库
ELRepo 仓库是基于社区的用于企业级 Linux 仓库,提供对 RedHat Enterprise (RHEL) 和 其他基于 RHEL的 Linux 发行版(CentOS、Scientific、Fedora 等)的支持。
ELRepo 聚焦于和硬件相关的软件包,包括文件系统驱动、显卡驱动、网络驱动、声卡驱动和摄像头驱动等。

导入ELRepo仓库的公共密钥

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

安装ELRepo仓库的yum源

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm

(3)查看可用的系统内核包
可以看到5.4和5.18两个版本

yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * elrepo-kernel: hkg.mirror.rackspace.com
elrepo-kernel                                                                                                                                | 3.0 kB  00:00:00     
elrepo-kernel/primary_db                                                                                                                     | 2.0 MB  00:00:01     
可安装的软件包
elrepo-release.noarch                                                             7.0-5.el7.elrepo                                                     elrepo-kernel
kernel-lt.x86_64                                                                  5.4.157-1.el7.elrepo                                                 elrepo-kernel
kernel-lt-devel.x86_64                                                            5.4.157-1.el7.elrepo                                                 elrepo-kernel
kernel-lt-doc.noarch                                                              5.4.157-1.el7.elrepo                                                 elrepo-kernel
kernel-lt-headers.x86_64                                                          5.4.157-1.el7.elrepo                                                 elrepo-kernel
kernel-lt-tools.x86_64                                                            5.4.157-1.el7.elrepo                                                 elrepo-kernel
kernel-lt-tools-libs.x86_64                                                       5.4.157-1.el7.elrepo                                                 elrepo-kernel
kernel-lt-tools-libs-devel.x86_64                                                 5.4.157-1.el7.elrepo                                                 elrepo-kernel
kernel-ml.x86_64                                                                  5.15.0-1.el7.elrepo                                                  elrepo-kernel
kernel-ml-devel.x86_64                                                            5.15.0-1.el7.elrepo                                                  elrepo-kernel
kernel-ml-doc.noarch                                                              5.15.0-1.el7.elrepo                                                  elrepo-kernel
kernel-ml-headers.x86_64                                                          5.15.0-1.el7.elrepo                                                  elrepo-kernel
kernel-ml-tools.x86_64                                                            5.15.0-1.el7.elrepo                                                  elrepo-kernel
kernel-ml-tools-libs.x86_64                                                       5.15.0-1.el7.elrepo                                                  elrepo-kernel
kernel-ml-tools-libs-devel.x86_64                                                 5.15.0-1.el7.elrepo                                                  elrepo-kernel
perf.x86_64                                                                       5.15.0-1.el7.elrepo                                                  elrepo-kernel
python-perf.x86_64                                                                5.15.0-1.el7.elrepo                                                  elrepo-kernel

(4)安装最新版本内核

 yum --enablerepo=elrepo-kernel install kernel-ml

–enablerepo 选项开启 CentOS 系统上的指定仓库。默认开启的是 elrepo,这里用 elrepo-kernel 替换。
(5)设置 grub2
内核安装好后,需要设置为默认启动选项并重启后才会生效
查看系统上的所有可用内核:

# sudo awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
0 : CentOS Linux (5.15.0-1.el7.elrepo.x86_64) 7 (Core)
1 : CentOS Linux (3.10.0-862.el7.x86_64) 7 (Core)
2 : CentOS Linux (0-rescue-94ed1d2d30f041468d148d9dd88524dc) 7 (Core)

设置新的内核为grub2的默认版本
服务器上存在4 个内核,我们要使用 5.18 这个版本,可以通过 grub2-set-default 0 命令或编辑 /etc/default/grub 文件来设置

通过 grub2-set-default 0 命令设置
其中 0 是上面查询出来的可用内核

grub2-set-default 0

生成 grub 配置文件并重启

grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.15.0-1.el7.elrepo.x86_64
Found initrd image: /boot/initramfs-5.15.0-1.el7.elrepo.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-862.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-862.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-94ed1d2d30f041468d148d9dd88524dc
Found initrd image: /boot/initramfs-0-rescue-94ed1d2d30f041468d148d9dd88524dc.img
done

重启服务器

reboot

(6) 验证

# uname -r
5.15.0-1.el7.elrepo.x86_64

内核升级博客:https://www.cnblogs.com/xzkzzz/p/9627658.html

1.6 更新Yum源

更改CentOS-Base.repo

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

新增docker.repo

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

新增k8s.repo

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
yum repolist

1.7 安装必要工具

yum install wget jg yum-utils psmisc vim net-tools telnet yum-utils device-mapper-persistent-data lvm2 git -y

1.8 时间同步配置

yum install -y ntpdate
crontab -e
0 */1 * * * /usr/sbin/ntpdate ntp1.aliyun.com

1.9 limit设置

ulimit -SHn 65535
vi /etc/security/limits.conf
* soft nofile 655360
* hard nofile 131072
* soft nprec 655350
* hard npros 655350
* soft memlock unlimited
* hard memlock unlimited

1.10 免密登录

# 在k8s-master01操作:

ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Q+2HrmD3D5NGiM9uJ8FJ8eqqKG+rK31qVbyJ8Et3grE root@k8s-master01
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|        ..       |
|     .  .o.      |
|  . . oo.o..     |
|   o *.=So+ .    |
|    E =o*+ o     |
| . o oo++.*      |
|o +.o. +++.o     |
|+B=+...ooo...    |
+----[SHA256]-----+

ssh-copy-id k8s-master02
ssh-copy-id k8s-master03

1.11 安装ipvsadm

yum install ipvsadm ipset sysstat conntrack libseccomp -y

配置ipvs模块

modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack

vi /etc/modules-load.d/ipvs.conf
ip_vs
ip_vs_lc
ip_vs_wlc
ip_vs_rr
ip_vs_wrr
ip_vs_lblc
ip_vs_lblcr
ip_vs_dh
ip_vs_sh
ip_vs_fo
ip_vs_nq
ip_vs_sed
ip_vs_ftp
ip_vs_sh
nf_conntrack
ip_tables
ip_set
xt_set
ipt_set
ipt_rpfilter
ipt_REJECT
ipip

启动服务

systemctl enable --now systemd-modules-load.service

查看ipvs是否加载

lsmod | grep -e ip_vs -e nf_conntrack
ip_vs_ftp              16384  0 
nf_nat                 49152  1 ip_vs_ftp
ip_vs_sed              16384  0 
ip_vs_nq               16384  0 
ip_vs_fo               16384  0 
ip_vs_dh               16384  0 
ip_vs_lblcr            16384  0 
ip_vs_lblc             16384  0 
ip_vs_wlc              16384  0 
ip_vs_lc               16384  0 
ip_vs_sh               16384  0 
ip_vs_wrr              16384  0 
ip_vs_rr               16384  0 
ip_vs                 159744  24 ip_vs_wlc,ip_vs_rr,ip_vs_dh,ip_vs_lblcr,ip_vs_sh,ip_vs_fo,ip_vs_nq,ip_vs_lblc,ip_v_wrr,ip_vs_lc,ip_vs_sed,ip_vs_ftp
nf_conntrack          155648  2 nf_nat,ip_vs
nf_defrag_ipv6         24576  2 nf_conntrack,ip_vs
nf_defrag_ipv4         16384  1 nf_conntrack
libcrc32c              16384  4 nf_conntrack,nf_nat,xfs,ip_vs

1.12 将桥接的IPv4流量传递到iptables的链

cat > /etc/sysctl.d/kubernetes.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
vm.swappiness=0
EOF
sysctl --system

1.13 安装脚本(ntp及免密外)

k8s-install1.sh

# 1.1 主机列表 
cat >> /etc/hosts <<EOF
10.160.103.101  hz-kubesphere-master01
10.160.103.102  hz-kubesphere-master02
10.160.103.103  hz-kubesphere-master03
EOF

# 1.2 关闭防火墙
systemctl disable firewalld --now

# 1.3 关闭selinux
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

# 1.4 关闭swap分区
swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

# 1.6 更新Yum源
yum install -y wget
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
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
yum repolist -y

# 1.5 升级内核
yum -y update
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install kernel-ml -y
grub2-set-default 0
grub2-mkconfig -o /boot/grub2/grub.cfg
reboot

k8s-install2.sh

# 1.7 安装必要工具
yum install wget jg yum-utils psmisc vim net-tools telnet yum-utils device-mapper-persistent-data lvm2 git -y

# 1.9 limit设置
ulimit -SHn 65535
echo "* soft nofile 655360" >> /etc/security/limits.conf
echo "* hard nofile 131072" >> /etc/security/limits.conf
echo "* soft nprec 655350" >> /etc/security/limits.conf
echo "* hard npros 655350" >> /etc/security/limits.conf
echo "* soft memlock unlimited" >> /etc/security/limits.conf
echo "* hard memlock unlimited" >> /etc/security/limits.conf

# 1.11 安装ipvsadm
yum install ipvsadm ipset sysstat conntrack libseccomp -y

# 1.12 将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/kubernetes.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
vm.swappiness=0
EOF
sysctl --system

# 2 docker安装
yum install docker-ce-19.03.* -y
systemctl enable docker --now
cat > /etc/docker/daemon.json <<EOF
 {
 "registry-mirrors": ["https://v16stybc.mirror.aliyuncs.com"],
 "exec-opts":["native.cgroupdriver=systemd"],
 "log-driver":"json-file",
 "log-opts": {
  "max-size": "100m"
  },
 "storage-driver":"overlay2",
 "storage-opts": [
  "overlay2.override_kernel_check=true"
  ]
}
EOF
systemctl restart docker

2 基本组件安装(所有节点执行)

2.1 docker安装

安装docker19.03版本

yum install docker-ce-19.03.* -y

启动服务

 systemctl enable docker --now

2.2 docker镜像加速及修改cgroup方式

cat > /etc/docker/daemon.json <<EOF
 {
 "registry-mirrors": ["https://v16stybc.mirror.aliyuncs.com"],
 "exec-opts":["native.cgroupdriver=systemd"],
 "log-driver":"json-file",
 "log-opts": {
  "max-size": "100m"
  },
 "storage-driver":"overlay2",
 "storage-opts": [
  "overlay2.override_kernel_check=true"
  ]
}
EOF
systemctl restart docker

2.3 安装kubernetes1.18.6安装包

yum install -y kubelet-1.18.6 kubeadm-1.18.6 kubectl-1.18.6

为了实现docker使用的cgroupdriver与kubelet使用的cgroup的一致性,建议修改如下文件内容:

cat > /etc/sysconfig/kubelet << EOF
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.2"
EOF

启动kubelet

systemctl enable kubelet --now

3 高可用组件安装

3.1 haproxy及keepalived安装

(安装master节点执行)

官方高可用网址:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability

yum install keepalived haproxy psmisc -y
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
echo "#" > /etc/keepalived/keepalived.conf
cp -p /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak
echo "#" > /etc/haproxy/haproxy.cfg

(2)编辑配置文件

haproxy:

k8s-master01/k8s-master02/k8s-master03:

cat /etc/haproxy/haproxy.cfg
#
global
    log /dev/log  local0 warning
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon
   
   stats socket /var/lib/haproxy/stats
   
defaults
  log global
  option  httplog
  option  dontlognull
  timeout connect 5000
  timeout client 50000
  timeout server 50000
   
frontend kube-apiserver
  bind *:16443
  mode tcp
  option tcplog
  default_backend kube-apiserver
   
backend kube-apiserver
    mode tcp
    option tcplog
    option tcp-check
    balance roundrobin
    default-server inter 10s downinter 5s rise 2 fall 2 slowstart 60s maxconn 250 maxqueue 256 weight 100
    server kube-apiserver-1 192.168.3.71:6443 check # Replace the IP address with your own.
    server kube-apiserver-2 192.168.3.72:6443 check # Replace the IP address with your own.
    server kube-apiserver-3 192.168.3.73:6443 check # Replace the IP address with your own.

keepalived:

k8s-master01

cat /etc/keepalived/keepalived.conf
#
global_defs {
  notification_email {
  }
  router_id LVS_DEVEL
  vrrp_skip_check_adv_addr
  vrrp_garp_interval 0
  vrrp_gna_interval 0
}
   
vrrp_script chk_haproxy {
  script "killall -0 haproxy"
  interval 2
  weight 2
}
   
vrrp_instance haproxy-vip {
  state BACKUP
  priority 100
  interface eth0                       # Network card
  virtual_router_id 77
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass wangjinxiong
  }
  mcast_src_ip 192.168.3.71      # The IP address of this machine
   
  virtual_ipaddress {
    192.168.3.70                  # The VIP address
  }
   
  track_script {
    chk_haproxy
  }
}

k8s-master02:

cat /etc/keepalived/keepalived.conf
#
global_defs {
  notification_email {
  }
  router_id LVS_DEVEL
  vrrp_skip_check_adv_addr
  vrrp_garp_interval 0
  vrrp_gna_interval 0
}
   
vrrp_script chk_haproxy {
  script "killall -0 haproxy"
  interval 2
  weight 2
}
   
vrrp_instance haproxy-vip {
  state BACKUP
  priority 99
  interface eth0                       # Network card
  virtual_router_id 77
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass wangjinxiong
  }
  mcast_src_ip 192.168.3.72      # The IP address of this machine
   
  virtual_ipaddress {
    192.168.3.70                  # The VIP address
  }
   
  track_script {
    chk_haproxy
  }
}

k8s-master03:

cat /etc/keepalived/keepalived.conf
#
global_defs {
  notification_email {
  }
  router_id LVS_DEVEL
  vrrp_skip_check_adv_addr
  vrrp_garp_interval 0
  vrrp_gna_interval 0
}
   
vrrp_script chk_haproxy {
  script "killall -0 haproxy"
  interval 2
  weight 2
}
   
vrrp_instance haproxy-vip {
  state BACKUP
  priority 98
  interface eth0                       # Network card
  virtual_router_id 77
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass wangjinxiong
  }
  mcast_src_ip 192.168.3.73      # The IP address of this machine
   
  virtual_ipaddress {
    192.168.3.70                  # The VIP address
  }
   
  track_script {
    chk_haproxy
  }
}

3.2 高可用部署

3.2.1 获取配置文件并修改

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

修改或者直接编辑以下内容:

cat kubeadm-config.yaml 
apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24000h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.3.71     # 本机IP
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  name: k8s-master01        # 本主机名
  taints:
  - effect: NoSchedule
    key: node-role.kubernetes.io/master
---
apiServer:
  certSANs:
  - 192.168.3.70
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controlPlaneEndpoint: "192.168.3.70:16443"    # 虚拟IP和haproxy端口
controllerManager: {}
dns:
  type: CoreDNS
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers    # 镜像仓库源要根据自己实际情况修改
kind: ClusterConfiguration
kubernetesVersion: v1.18.6     # k8s版本
networking:
  dnsDomain: cluster.local
  podSubnet: "10.255.0.0/16"
  serviceSubnet: 10.254.0.0/16
scheduler: {}

将配置文件拷贝到k8s-master02,k8s-master03

scp kubeadm-config.yaml root@k8s-master02:/root
scp kubeadm-config.yaml root@k8s-master03:/root

三个节点分别下载镜像:

kubeadm config images pull --config kubeadm-config.yaml

下载的镜像分别是:

# kubeadm config images pull --config kubeadm-config.yaml
W1114 11:56:27.286372    4411 configset.go:202] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
[config/images] Pulled registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.18.6
[config/images] Pulled registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.18.6
[config/images] Pulled registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.18.6
[config/images] Pulled registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.18.6
[config/images] Pulled registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2
[config/images] Pulled registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.3-0
[config/images] Pulled registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.6.7

3.2.2 集群初始化

在k8s-master01上执行:

# kubeadm init --config kubeadm-config.yaml
W1114 12:04:56.768490    5707 configset.go:202] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
[init] Using Kubernetes version: v1.18.6
[preflight] Running pre-flight checks
[preflight] Pulling images required for setting up a Kubernetes cluster
[preflight] This might take a minute or two, depending on the speed of your internet connection
[preflight] You can also perform this action in beforehand using 'kubeadm config images pull'
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Starting the kubelet
[certs] Using certificateDir folder "/etc/kubernetes/pki"
[certs] Generating "ca" certificate and key
[certs] Generating "apiserver" certificate and key
[certs] apiserver serving cert is signed for DNS names [k8s-master01 kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.254.0.1 192.168.3.71 192.168.3.70 192.168.3.70]
[certs] Generating "apiserver-kubelet-client" certificate and key
[certs] Generating "front-proxy-ca" certificate and key
[certs] Generating "front-proxy-client" certificate and key
[certs] Generating "etcd/ca" certificate and key
[certs] Generating "etcd/server" certificate and key
[certs] etcd/server serving cert is signed for DNS names [k8s-master01 localhost] and IPs [192.168.3.71 127.0.0.1 ::1]
[certs] Generating "etcd/peer" certificate and key
[certs] etcd/peer serving cert is signed for DNS names [k8s-master01 localhost] and IPs [192.168.3.71 127.0.0.1 ::1]
[certs] Generating "etcd/healthcheck-client" certificate and key
[certs] Generating "apiserver-etcd-client" certificate and key
[certs] Generating "sa" key and public key
[kubeconfig] Using kubeconfig folder "/etc/kubernetes"
[endpoint] WARNING: port specified in controlPlaneEndpoint overrides bindPort in the controlplane address
[kubeconfig] Writing "admin.conf" kubeconfig file
[endpoint] WARNING: port specified in controlPlaneEndpoint overrides bindPort in the controlplane address
[kubeconfig] Writing "kubelet.conf" kubeconfig file
[endpoint] WARNING: port specified in controlPlaneEndpoint overrides bindPort in the controlplane address
[kubeconfig] Writing "controller-manager.conf" kubeconfig file
[endpoint] WARNING: port specified in controlPlaneEndpoint overrides bindPort in the controlplane address
[kubeconfig] Writing "scheduler.conf" kubeconfig file
[control-plane] Using manifest folder "/etc/kubernetes/manifests"
[control-plane] Creating static Pod manifest for "kube-apiserver"
[control-plane] Creating static Pod manifest for "kube-controller-manager"
W1114 12:04:59.684854    5707 manifests.go:225] the default kube-apiserver authorization-mode is "Node,RBAC"; using "Node,RBAC"
[control-plane] Creating static Pod manifest for "kube-scheduler"
W1114 12:04:59.685634    5707 manifests.go:225] the default kube-apiserver authorization-mode is "Node,RBAC"; using "Node,RBAC"
[etcd] Creating static Pod manifest for local etcd in "/etc/kubernetes/manifests"
[wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests". This can take up to 4m0s
[apiclient] All control plane components are healthy after 28.238942 seconds
[upload-config] Storing the configuration used in ConfigMap "kubeadm-config" in the "kube-system" Namespace
[kubelet] Creating a ConfigMap "kubelet-config-1.18" in namespace kube-system with the configuration for the kubelets in the cluster
[upload-certs] Skipping phase. Please see --upload-certs
[mark-control-plane] Marking the node k8s-master01 as control-plane by adding the label "node-role.kubernetes.io/master=''"
[mark-control-plane] Marking the node k8s-master01 as control-plane by adding the taints [node-role.kubernetes.io/master:NoSchedule]
[bootstrap-token] Using token: abcdef.0123456789abcdef
[bootstrap-token] Configuring bootstrap tokens, cluster-info ConfigMap, RBAC Roles
[bootstrap-token] configured RBAC rules to allow Node Bootstrap tokens to get nodes
[bootstrap-token] configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials
[bootstrap-token] configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token
[bootstrap-token] configured RBAC rules to allow certificate rotation for all node client certificates in the cluster
[bootstrap-token] Creating the "cluster-info" ConfigMap in the "kube-public" namespace
[kubelet-finalize] Updating "/etc/kubernetes/kubelet.conf" to point to a rotatable kubelet client certificate and key
[addons] Applied essential addon: CoreDNS
[endpoint] WARNING: port specified in controlPlaneEndpoint overrides bindPort in the controlplane address
[addons] Applied essential addon: kube-proxy

Your Kubernetes control-plane has initialized successfully!

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

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 control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root:

  kubeadm join 192.168.3.70:16443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:a842f419cb57aea185507844755a487814bacd1b34dd7d9ca6507944f963118e \
    --control-plane 

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

kubeadm join 192.168.3.70:16443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:a842f419cb57aea185507844755a487814bacd1b34dd7d9ca6507944f963118e 

如果初始化失败,可以重置:

kubeadm reset

k8s-master01拷贝管理员配置文件:

[root@k8s-master01 ~]# mkdir -p $HOME/.kube
[root@k8s-master01 ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s-master01 ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config

查看集群情况:

# kubectl get nodes
NAME           STATUS     ROLES    AGE     VERSION
k8s-master01   NotReady   master   2m36s   v1.18.6

在其它两个master节点创建以下目录:

mkdir -p /etc/kubernetes/pki/etcd

把主master节点证书分别复制到其他master节点

scp /etc/kubernetes/pki/ca.* root@k8s-master02:/etc/kubernetes/pki/
scp /etc/kubernetes/pki/sa.* root@k8s-master02:/etc/kubernetes/pki/
scp /etc/kubernetes/pki/front-proxy-ca.* root@k8s-master02:/etc/kubernetes/pki/
scp /etc/kubernetes/pki/etcd/ca.* root@k8s-master02:/etc/kubernetes/pki/etcd/
scp /etc/kubernetes/admin.conf root@k8s-master02:/etc/kubernetes/
scp /etc/kubernetes/pki/ca.* root@k8s-master03:/etc/kubernetes/pki/
scp /etc/kubernetes/pki/sa.* root@k8s-master03:/etc/kubernetes/pki/
scp /etc/kubernetes/pki/front-proxy-ca.* root@k8s-master03:/etc/kubernetes/pki/
scp /etc/kubernetes/pki/etcd/ca.* root@k8s-master03:/etc/kubernetes/pki/etcd/
scp /etc/kubernetes/admin.conf root@k8s-master03:/etc/kubernetes/

k8s-master02 k8s-master03节点加入集群执行以下命令

 kubeadm join 192.168.3.70:16443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:a842f419cb57aea185507844755a487814bacd1b34dd7d9ca6507944f963118e \
    --control-plane 

worker节点加入集群执行以下命令

kubeadm join 192.168.3.70:16443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:a842f419cb57aea185507844755a487814bacd1b34dd7d9ca6507944f963118e

查看k8s集群情况:

# kubectl  get pod --all-namespaces -o wide
NAMESPACE     NAME                                   READY   STATUS    RESTARTS   AGE     IP             NODE           NOMINATED NODE   READINESS GATES
kube-system   coredns-546565776c-5pb6d               0/1     Pending   0          7m43s   <none>         <none>         <none>           <none>
kube-system   coredns-546565776c-7fbvc               0/1     Pending   0          7m43s   <none>         <none>         <none>           <none>
kube-system   etcd-k8s-master01                      1/1     Running   0          7m51s   192.168.3.71   k8s-master01   <none>           <none>
kube-system   etcd-k8s-master02                      1/1     Running   0          5m55s   192.168.3.72   k8s-master02   <none>           <none>
kube-system   etcd-k8s-master03                      1/1     Running   0          3m44s   192.168.3.73   k8s-master03   <none>           <none>
kube-system   kube-apiserver-k8s-master01            1/1     Running   0          7m51s   192.168.3.71   k8s-master01   <none>           <none>
kube-system   kube-apiserver-k8s-master02            1/1     Running   0          5m56s   192.168.3.72   k8s-master02   <none>           <none>
kube-system   kube-apiserver-k8s-master03            1/1     Running   1          3m50s   192.168.3.73   k8s-master03   <none>           <none>
kube-system   kube-controller-manager-k8s-master01   1/1     Running   1          7m51s   192.168.3.71   k8s-master01   <none>           <none>
kube-system   kube-controller-manager-k8s-master02   1/1     Running   0          5m56s   192.168.3.72   k8s-master02   <none>           <none>
kube-system   kube-controller-manager-k8s-master03   1/1     Running   0          4m2s    192.168.3.73   k8s-master03   <none>           <none>
kube-system   kube-proxy-79jxw                       1/1     Running   0          7m43s   192.168.3.71   k8s-master01   <none>           <none>
kube-system   kube-proxy-qq4td                       1/1     Running   0          5m57s   192.168.3.72   k8s-master02   <none>           <none>
kube-system   kube-proxy-z42k4                       1/1     Running   0          5m10s   192.168.3.73   k8s-master03   <none>           <none>
kube-system   kube-proxy-zk628                       1/1     Running   0          85s     192.168.3.74   k8s-worker01   <none>           <none>
kube-system   kube-scheduler-k8s-master01            1/1     Running   1          7m51s   192.168.3.71   k8s-master01   <none>           <none>
kube-system   kube-scheduler-k8s-master02            1/1     Running   0          5m56s   192.168.3.72   k8s-master02   <none>           <none>
kube-system   kube-scheduler-k8s-master03            1/1     Running   0          4m26s   192.168.3.73   k8s-master03   <none>           <none>
# kubectl  get nodes
NAME           STATUS     ROLES    AGE     VERSION
k8s-master01   NotReady   master   9m29s   v1.18.6
k8s-master02   NotReady   master   7m28s   v1.18.6
k8s-master03   NotReady   master   6m41s   v1.18.6
k8s-worker01   NotReady   <none>   2m56s   v1.18.6
k8s-worker02   NotReady   <none>   9s      v1.18.6

备注:status为notready,是由于没有安装网络组件。

3.2.3 安装网络组件calico

calico下载地址:https://docs.projectcalico.org/v3.15/manifests/calico.yaml

kubectl apply -f calico3.20.1.yaml 

观察集群情况:

# kubectl get nodes
NAME           STATUS   ROLES    AGE     VERSION
k8s-master01   Ready    master   3h20m   v1.18.6
k8s-master02   Ready    master   3h18m   v1.18.6
k8s-master03   Ready    master   3h17m   v1.18.6
k8s-worker01   Ready    <none>   3h13m   v1.18.6
k8s-worker02   Ready    <none>   3h11m   v1.18.6
[root@k8s-master01 ~]# kubectl get pod --all-namespaces
NAMESPACE     NAME                                      READY   STATUS    RESTARTS   AGE
default       nginx0920                                 1/1     Running   0          66m
kube-system   calico-kube-controllers-7c4bc6fff-5lzmv   1/1     Running   0          3h10m
kube-system   calico-node-2gfcb                         1/1     Running   0          3h10m
kube-system   calico-node-88cq9                         1/1     Running   0          3h10m
kube-system   calico-node-8wrcf                         1/1     Running   0          3h10m
kube-system   calico-node-fmpmv                         1/1     Running   0          3h10m
kube-system   calico-node-qw7nf                         1/1     Running   0          3h10m
kube-system   coredns-546565776c-5pb6d                  1/1     Running   0          3h20m
kube-system   coredns-546565776c-7fbvc                  1/1     Running   0          3h20m
kube-system   etcd-k8s-master01                         1/1     Running   0          3h20m
kube-system   etcd-k8s-master02                         1/1     Running   0          3h18m
kube-system   etcd-k8s-master03                         1/1     Running   0          3h16m
kube-system   kube-apiserver-k8s-master01               1/1     Running   0          3h20m
kube-system   kube-apiserver-k8s-master02               1/1     Running   0          3h18m
kube-system   kube-apiserver-k8s-master03               1/1     Running   1          3h16m
kube-system   kube-controller-manager-k8s-master01      1/1     Running   1          3h20m
kube-system   kube-controller-manager-k8s-master02      1/1     Running   0          3h18m
kube-system   kube-controller-manager-k8s-master03      1/1     Running   0          3h16m
kube-system   kube-proxy-79jxw                          1/1     Running   0          3h20m
kube-system   kube-proxy-7wv9q                          1/1     Running   0          3h11m
kube-system   kube-proxy-qq4td                          1/1     Running   0          3h18m
kube-system   kube-proxy-z42k4                          1/1     Running   0          3h17m
kube-system   kube-proxy-zk628                          1/1     Running   0          3h14m
kube-system   kube-scheduler-k8s-master01               1/1     Running   1          3h20m
kube-system   kube-scheduler-k8s-master02               1/1     Running   0          3h18m
kube-system   kube-scheduler-k8s-master03               1/1     Running   0          3h17m

3.2.4 安装etcd客户端

下载:

wget https://github.com/etcd-io/etcd/releases/download/v3.4.3/etcd-v3.4.3-linux-amd64.tar.gz

解压并加入环境变量:

tar zxvf etcd-v3.4.3-linux-amd64.tar.gz 
mv etcd-v3.4.3-linux-amd64/etcdctl /usr/local/bin
chmod +x /usr/local/bin/etcdctl
rm -rf etcd-v3.4.3-linux-amd64

查看etcd高可用集群健康状态

 ETCDCTL_API=3 etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/peer.crt --key=/etc/kubernetes/pki/etcd/peer.key --write-out=table --endpoints=192.168.3.71:2379,192.168.3.72:2379,192.168.3.73:2379 endpoint health
+-------------------+--------+-------------+-------+
|     ENDPOINT      | HEALTH |    TOOK     | ERROR |
+-------------------+--------+-------------+-------+
| 192.168.3.73:2379 |   true | 14.763006ms |       |
| 192.168.3.72:2379 |   true | 14.539845ms |       |
| 192.168.3.71:2379 |   true | 15.906503ms |       |
+-------------------+--------+-------------+-------+

查看etcd高可用集群leader

ETCDCTL_API=3 etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/peer.crt --key=/etc/kubernetes/pki/etcd/peer.key --write-out=table --endpoints=192.168.3.71:2379,192.168.3.72:2379,192.168.3.73:2379 endpoint status
+-------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
|     ENDPOINT      |        ID        | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |
+-------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| 192.168.3.71:2379 | 676a68a7e2db62d3 |   3.4.3 |  5.0 MB |      true |      false |         3 |      47931 |              47931 |        |
| 192.168.3.72:2379 | 8250ee8843dcbebf |   3.4.3 |  5.0 MB |     false |      false |         3 |      47931 |              47931 |        |
| 192.168.3.73:2379 | f1d7b52439f4b031 |   3.4.3 |  5.0 MB |     false |      false |         3 |      47931 |              47931 |        |
+-------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+

https://www.cnblogs.com/lfl17718347843/p/13417304.html

4 更新证书为100年

4.1 安装go编译器

(1)下载二进制包

wget https://dl.google.com/go/go1.13.4.linux-amd64.tar.gz

(2)解压

tar -zxvf go1.13.4.linux-amd64.tar.gz -C /usr/local

(3)导入环境变量

mkdir -p /home/gopath
cat >> /etc/profile <<EOF
export GOROOT=/usr/local/go
export GOPATH=/home/gopath
export PATH=\$PATH:\$GOROOT/bin
EOF
source /etc/profile

(4)查看版本

# go version
go version go1.13.4 linux/amd64

4.2 编译kubeadm并替换

(1)下载源码

git clone https://github.com/kubernetes/kubernetes.git

(2)切换到自己的版本,修改源码,比如我的是v1.18.6版本

cd /root/kubernetes
git checkout v1.18.6

vi cmd/kubeadm/app/constants/constants.go,找到CertificateValidity,修改如下

....
const (
        // KubernetesDir is the directory Kubernetes owns for storing various configuration files
        KubernetesDir = "/etc/kubernetes"
        // ManifestsSubDirName defines directory name to store manifests
        ManifestsSubDirName = "manifests"
        // TempDirForKubeadm defines temporary directory for kubeadm
        // should be joined with KubernetesDir.
        TempDirForKubeadm = "tmp"

        // CertificateValidity defines the validity for all the signed certificates generated by kubeadm
        CertificateValidity = time.Hour * 24 * 365 * 100
....

(3)编译kubeadm

make WHAT=cmd/kubeadm

编译完生成如下目录和二进制文件

# ll _output/bin/
总用量 76708
-rwxr-xr-x 1 root root  6819840 12月 11 00:24 conversion-gen
-rwxr-xr-x 1 root root  6795264 12月 11 00:24 deepcopy-gen
-rwxr-xr-x 1 root root  6766592 12月 11 00:24 defaulter-gen
-rwxr-xr-x 1 root root  4887622 12月 11 00:24 go2make
-rwxr-xr-x 1 root root  2109440 12月 11 00:25 go-bindata
-rwxr-xr-x 1 root root 39731200 12月 11 00:26 kubeadm
-rwxr-xr-x 1 root root 11436032 12月 11 00:24 openapi-gen
[root@k8s-master01 kubernetes]# pwd
/root/kubernetes

(4)备份原kubeadm和证书文件

cp -r /etc/kubernetes/pki /root/ca-backup
cp -p /usr/bin/kubeadm /root/ca-backup

(5)将新生成的kubeadm进行替换

cd /root/kubernetes
cp _output/bin/kubeadm /usr/bin/kubeadm

(6)更新证书:

# cd /etc/kubernetes/pki
# kubeadm alpha certs renew all

(7)输出如下:

# kubeadm alpha certs renew all
[renew] Reading configuration from the cluster...
[renew] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'

certificate embedded in the kubeconfig file for the admin to use and for kubeadm itself renewed
certificate for serving the Kubernetes API renewed
certificate the apiserver uses to access etcd renewed
certificate for the API server to connect to kubelet renewed
certificate embedded in the kubeconfig file for the controller manager to use renewed
certificate for liveness probes to healthcheck etcd renewed
certificate for etcd nodes to communicate with each other renewed
certificate for serving etcd renewed
certificate for the front proxy client renewed
certificate embedded in the kubeconfig file for the scheduler manager to use renewed

(8)查询证书有效期:

[root@k8s-master01 pki]# kubeadm alpha certs check-expiration
[check-expiration] Reading configuration from the cluster...
[check-expiration] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'

CERTIFICATE                EXPIRES                  RESIDUAL TIME   CERTIFICATE AUTHORITY   EXTERNALLY MANAGED
admin.conf                 Nov 16, 2121 16:29 UTC   99y                                     no      
apiserver                  Nov 16, 2121 16:29 UTC   99y             ca                      no      
apiserver-etcd-client      Nov 16, 2121 16:29 UTC   99y             etcd-ca                 no      
apiserver-kubelet-client   Nov 16, 2121 16:29 UTC   99y             ca                      no      
controller-manager.conf    Nov 16, 2121 16:29 UTC   99y                                     no      
etcd-healthcheck-client    Nov 16, 2121 16:29 UTC   99y             etcd-ca                 no      
etcd-peer                  Nov 16, 2121 16:29 UTC   99y             etcd-ca                 no      
etcd-server                Nov 16, 2121 16:29 UTC   99y             etcd-ca                 no      
front-proxy-client         Nov 16, 2121 16:29 UTC   99y             front-proxy-ca          no      
scheduler.conf             Nov 16, 2121 16:29 UTC   99y                                     no      

CERTIFICATE AUTHORITY   EXPIRES                  RESIDUAL TIME   EXTERNALLY MANAGED
ca                      Nov 12, 2031 04:04 UTC   9y              no      
etcd-ca                 Nov 12, 2031 04:04 UTC   9y              no      
front-proxy-ca          Nov 12, 2031 04:04 UTC   9y              no      
[root@k8s-master01 pki]# kubectl get nodes
NAME           STATUS   ROLES    AGE   VERSION
k8s-master01   Ready    master   26d   v1.18.6
k8s-master02   Ready    master   26d   v1.18.6
k8s-master03   Ready    master   26d   v1.18.6
k8s-worker01   Ready    <none>   26d   v1.18.6
k8s-worker02   Ready    <none>   26d   v1.18.6
k8s-worker03   Ready    <none>   26d   v1.18.6
k8s-worker04   Ready    <none>   26d   v1.18.6
[root@k8s-master01 pki]# 

参考博客:https://zhuanlan.zhihu.com/p/150001642 https://blog.youkuaiyun.com/sinat_28371057/article/details/90442805

5 在 Kubernetes 上最小化安装 KubeSphere3.1.1

前提条件:kubernetes有默认的SC
执行以下命令开始安装

kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.1.1/kubesphere-installer.yaml
   
kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.1.1/cluster-configuration.yaml

检查安装日志:

kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f

确保在安全组中打开了端口 30880,并通过 NodePort (IP:30880) 使用默认帐户和密码 (admin/P@88w0rd) 访问 Web 控制台。

参考博客:https://v3-1.docs.kubesphere.io/zh/docs/quick-start/minimal-kubesphere-on-k8s/

k8s删除节点:https://blog.youkuaiyun.com/inrgihc/article/details/109628471
修改kubectl get cs报错:https://blog.youkuaiyun.com/a772304419/article/details/112228226
K8S calicoctl 客户端工具安装:https://www.cnblogs.com/reatual/p/14366009.html

修改kubesphere web admin登录密码:

kubectl patch users <username> -p '{"spec":{"password":"<password>"}}' --type='merge' && kubectl annotate users <username> iam.kubesphere.io/password-encrypted-

6 kubeadm添加与删除节点

6.1 首先在master上生成新的token

[root@node1 ~]# kubeadm token create --print-join-command
W1111 17:50:25.985706  292853 configset.go:202] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
kubeadm join apiserver.cluster.local:6443 --token sc2ty3.ej38ceisi5lmt9ad     --discovery-token-ca-cert-hash sha256:42bf6e526b795854b61b7c0ca875f9a8292b989d44f0f51a4d8dec450711b89e

6.2在master上生成用于新master加入的证书

[root@node1 ~]# kubeadm init phase upload-certs --upload-certs
I1111 17:50:52.634857  293705 version.go:252] remote version is much newer: v1.19.3; falling back to: stable-1.18
W1111 17:50:53.498664  293705 configset.go:202] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
[upload-certs] Storing the certificates in Secret "kubeadm-certs" in the "kube-system" Namespace
[upload-certs] Using certificate key:
c5c77a2b5989c75c0ec98fae91f771c569e5764523fd8daa102a1cb074c07e2f

6.3 添加新节点

6.3.1 添加新node节点

[root@node3 ~]kubeadm join apiserver.cluster.local:6443 --token sc2ty3.ej38ceisi5lmt9ad     --discovery-token-ca-cert-hash sha256:42bf6e526b795854b61b7c0ca875f9a8292b989d44f0f51a4d8dec450711b89e

6.3.2 添加新master节点

把红色部分加到–experimental-control-plane --certificate-key后。

[root@node2 ~]kubeadm join apiserver.cluster.local:6443 --token sc2ty3.ej38ceisi5lmt9ad \
  --discovery-token-ca-cert-hash sha256:42bf6e526b795854b61b7c0ca875f9a8292b989d44f0f51a4d8dec450711b89e \
  --control-plane --certificate-key c5c77a2b5989c75c0ec98fae91f771c569e5764523fd8daa102a1cb074c07e2f

6.4 删除node节点

(1) 驱逐这个node节点上的pod

# kubectl drain node2 --delete-local-data --force --ignore-daemonsets

检查节点状态,被标记为不可调度节点

# kubectl get nodes

(2) 删除这个node节点

kubectl delete node node2

(3)在node06这个节点上执行如下命令

kubeadm reset
systemctl stop kubelet
systemctl stop docker
rm -rf /var/lib/cni/
rm -rf /var/lib/kubelet/*
rm -rf /etc/cni/
ifconfig cni0 down
ifconfig flannel.1 down
ifconfig docker0 down
ip link delete cni0
ip link delete flannel.1
systemctl start docker
systemctl start kubelet

[

](https://blog.youkuaiyun.com/inrgihc/article/details/109628471)

一、kubeadm部署Kubernetes(k8s) 1.23.0多主高可用集群 kubeadm部署Kubernetes(k8s) 1.23.0多主高可用集群 阅读详情

相关推荐

使用kubeadm部署高可用的k8s集群

使用kubeadm部署k8s高可用集群 部署k8s集群方式有很多种,包括二进制文件部署,kubespray,rancher,kubeadm等等。 纯粹的二进制文件部署非常复杂和麻烦,而使用良好的工具来达到“偷懒”的目的是我们程序员的天性,因此自动化部署工具才是我们的首选。 关于部署工具的选用逻辑也很简单,kubeadm是官方提供和推荐的,因此可以认为kubeadm是可用而且可靠的,文档也足够全面,...

momoudong的博客 5554

cat的使用技巧 cat>> /etc/hosts << EOF

前言 环境:Centos7.9cat实用技巧 实用技巧1:输出多行字符cat菜单大全: >青椒炒肉丝 >凉拌黄瓜 >铁锅炖大鹅 EOF 使用技巧2:覆盖或追加多行字符到文件cat>>/etc/rc.local菜单大全: >青椒炒肉丝 >凉拌黄瓜 >我家:$PATH #这里将被解析成环境变量PATH...

liuyang9909的博客 4906

通过Kubeadm部署Kubernetes高可用集群

-pod-network-cidr # Pod网络的地址范围,其值为CIDR格式的网络地址,通常情况下Flannel网络插件的默认为10.244.0.0/16,Calico网络插件的默认值为192.168.0.0/16。命令如上图所示,执行初始化完成会打印出来,需要在命令最后添加选项 --cri-socket=unix:///run/cri-dockerd.sock。此处可使用华为云的容器镜像加速器,获取方式:登录华为云,搜索进入容器镜像服务 SWR,点击镜像资源--->镜像中心--->镜像加速器。

licsmile的博客 1195

重复安装kubesphere出错暂时性解决

将Fail 改为 Ignore 后重启 ks-installer ,待安装完成后再改回 Fail。重复安装时, 如果 ks 处于异常状态会导致这个问题,暂时可以这么解决。问题已经解决成功开始安装。

weixin_45965192的博客 1833

北航机器学习2020-2021秋季学期期末试题回忆

北航机器学习2020-2021秋季学习期末试题回忆 fanjn, zhangyy, yuanq, wanggq, weixy, anh, wangyy, zhouxy, likc1 【注:考试使用纯白的A3答题纸,考试时间2h,各位同学可以自行模拟考试】 此试卷1-8题为10分,第9题为20分 1.2077年人类发射近地卫星,一共发射800颗,根据大小和轨道远近,有着不同的宜居条件(+表示宜居),有以下表格(数字八九不离十,其他属性什么的原题就是交替的) 数量 大小 轨道 是否宜居 30

weixin_45262065的博客 7611

LS-DYNA超高速碰撞仿真入门:从SPH算法配置到铝靶板穿孔分析(附K文件模板)

本文详细介绍了使用LS-DYNA中的SPH(光滑粒子流体动力学)算法进行超高速碰撞仿真的完整流程。以铝弹丸撞击铝靶板为例,从SPH算法原理、LS-PrePost前处理、材料模型与状态方程设置,到接触定义、边界条件及K文件生成,提供了系统的入门指导和关键参数调试经验,帮助工程师高效模拟材料破碎、穿孔等极端变形问题。

h0i1j2k3l的博客 735

【Linux/shell】cat结合EOF脚本案例(20210109)

案例1:EOF常规用法 cat >>/etc/hosts <<EOF 192.168.50.128 master 192.168.50.128 node0 192.168.50.131 node1 192.168.50.132 node2 EOF 案例2:带有符号$的前面一定要加上转义符\才行。 cat > /root/shell2.sh<< EOF for((i=1;i<=100;i++)); do echo \

weixin_39246554的博客 853

从开源到落地:SimpleBGC 三轴稳像平台全栈技术解析(上)

SimpleBGC是一款开源的稳定云台控制系统,相比专业设备具有显著的价格优势(仅为1/5-1/10),采用模块化设计支持全场景适配。系统包含硬件设计、软件代码和算法三大核心:硬件采用STM32主控和IMU传感器,支持6步换向和FOC电机驱动;软件采用三层架构(驱动层、算法层、应用层),实现姿态解算和PID控制;算法方面提供互补滤波(基础版)和卡尔曼滤波(高端版),可达到±0.5°至±0.1°的稳定精度。该系统适用于无人机航拍、工业检测等多种应用场景,特别适合DIY开发者和中小企业进行定制化开发。

bother3000的博客 3687

【k8s】Kubernetes版本v1.17.3 kubesphere 3.1.1 默认用户登录失败

问题解决日志: 最后reboot 重启。

oDianZi1234567的博客 1617

同花顺PC端逆向解析:Hook注入与加密破解实战指南

在Windows客户端数据采集场景中,当常规HTTP爬虫失效时,内存级逆向分析成为获取实时行情数据的关键路径。其核心涉及进程注入、运行时解密、反调试绕过等底层技术,本质是理解PE加载机制、函数调用约定与内存保护策略的协同过程。同花顺作为典型加固客户端,采用ASPack加壳+自研解密+多线程校验三重防护,迫使开发者转向APC注入、动态密钥提取与XXTEA算法复刻等高阶手段。本文聚焦于DLL注入选型依据、解密函数定位方法及二进制Blob结构化解析,最终实现从内存读取到Pandas DataFrame的端到端数据

weixin_32234493的博客 1208

项目管理 Agent:进度追踪与风险预警 Harness

我们先从LangChain的Agent定义说起:Agent是一个能感知环境、自主决策、调用工具、执行动作、迭代反思的智能实体。而「项目管理全自主Agent」,就是把Agent的核心能力和项目管理的五大过程组(启动、规划、执行、监控、收尾)深度结合,聚焦执行监控阶段的两个核心痛点:进度偏差自动化计算、风险信号自动化识别与预警的专门化Agent。全感知(Omnisensing):能从。

AI架构师小马 518

365xav.cf/forum.php,jupyterlab-latex

# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.# yarn lockfile v1"@babel/code-frame@^7.0.0":version "7.8.3"resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3....

weixin_29885875的博客 19万+

多智能体强化学习MATD3算法完整复现与分析

多智能体强化学习MATD3算法复现与分析摘要 MATD3算法是多智能体深度强化学习领域的重要进展,通过改进MADDPG算法,引入双Q学习、延迟策略更新和目标策略平滑等技术,显著提升了算法稳定性。本文完整复现了MATD3算法,详细解析了其数学原理,包括部分可观测马尔可夫博弈模型和TD3核心思想。在实现层面,设计了集中式Critic和分布式Actor的神经网络架构,采用PyTorch框架构建了Actor-Critic网络模块,包含精心设计的权重初始化和训练流程。该算法有效解决了多智能体环境中的非平稳性、信用分配

max500600的博客 532

部署一套完整的K8s高可用集群kubeadm-V1.21教程:深入掌握Kubernetes集群部署

部署一套完整的K8s高可用集群kubeadm-V1.21教程:深入掌握Kubernetes集群部署 去发现同类优质开源项目:https://gitcode.com/ 在云计算与容器技术日益成熟的今天,Kubernetes(K8s)作为容器编排领域的佼佼者,已经成为了企业级应用交付和运维的标准。本文将向您推荐一款开源项目——部署一套完整的K8s高可用集群(kubeadm-V1.21)教程,助您轻松掌...

gitblog_06730的博客 815

工业级Modbus ASCII实时监控系统(WinForms完整实现)

本文介绍了一个基于WinForms的工业级Modbus ASCII实时监控系统实现方案。该系统采用经典工控界面布局,包含串口配置、数据采集控制和实时数据显示三大区域。核心功能包括:串口通信参数设置、Modbus从站地址配置、寄存器数据采集、实时数据表格展示和趋势图绘制。系统通过ModbusAsciiClient类实现通信核心,采用定时器轮询机制采集数据,支持最多100个数据点的历史趋势显示。界面设计注重用户体验,配置区位于左侧,主显示区在右侧,底部为状态和日志区,符合工业控制系统的操作习惯。代码示例展示了窗

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 279

运动想象 (MI) 分类学习系列 (19) : EEG-TransNet

本文提出了一种基于注意力机制的卷积神经网络(EEG-TransNet),用于运动想象脑电图(MI-EEG)解码。该方法创新性地通过平均池化和方差池化提取多模态时间信息,并结合自注意力模块捕获长期依赖关系。消融实验表明,方差池化比最大池化更有效(p<0.05),且注意力模块和卷积编码器对特征判别性至关重要。可视化分析验证了该方法能学习到更具判别性的紧凑特征。该工作为MI-EEG解码提供了新的多尺度时间信息融合视角,代码已开源。

走在深度学习前沿的小宋 359

Kubeadm方式部署K8s高可用集群

一个6节点的Kubernetes(K8s)高可用集群是一套由6台服务器组成的系统,旨在通过冗余和故障转移机制确保集群的稳定性和可靠性。它通常包括多个主节点(Master Nodes),这些节点运行着Kubernetes控制平面组件,如API服务器、调度器和控制器管理器,以及多个工作节点(Worker Nodes),它们负责运行容器化的应用。在高可用配置中,主节点会部署多个实例,并通过选举机制确保始终有一个主节点处于活跃状态,其他主节点则作为备份。工作节点则负责执行容器任务,并通过负载均衡和故障转移策略来保证

weixin_72583321的博客 2603

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

kubeadm部署 Kubernetes(k8s) 高可用集群 V1.32

kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。

srebro.cn | 运维小弟 1769

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

kubeadm部署 Kubernetes(k8s) 高可用集群【V1.28 】

kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。

srebro.cn | 运维小弟 3617

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

kubeadm部署 Kubernetes(k8s) 高可用集群 V1.20

Calico 在每一个计算节点利用 Linux Kernel 实现了一个高效的虚拟路由器( vRouter) 来负责数据转发,而每个 vRouter 通过 BGP 协议负责把自己上运行的 workload 的路由信息向整个 Calico 网络内传播。因为我们的K8S集群已经初始化过了,再添加其他master 节点到集群中,首要添加是把已经初始化过的证书拷贝到其他master 节点上。docker的默认工作路径在/var/lib/docker ,最好不修改默认存储路径,可以做软链接。

https://ophome.blog.youkuaiyun.com,在IT行业有多年的工作经验,尤其是在Python、Linux、负载均衡、Nginx和服务器运维等领域。 1193

CKS认证 | 使用kubeadm部署K8s高可用集群(v1.26)

在企业级应用中,高可用性已成为Kubernetes部署的必要条件,特别是在安全性、性能优化和易用性方面,对系统的稳定性提出了极高要求。本文章主要讲述如何快速搭建高可用的集群,满足企业对稳定性和扩展性的需求。

小安的运维专栏 1966

Kubeadm - K8S1.20 - 高可用集群部署(博客)

enabled=1gpgcheck=0EOF yum install -y kubelet-1.20.15 kubeadm-1.20.15 kubectl-1.20.15 #配置Kubelet使用阿里云的pause镜像 cat > /etc/sysconfig/kubelet

qq_54235967的博客 702

k8s-kubeadm高可用安装部署

Kubernetes是谷歌以Borg为前身,基于谷歌15年生产环境经验的基础上开源的一个项目 Kubernetes致力于提供跨主机集群的自动部署、扩展、高可用以及运行应用程序容器的平台Kubernetes Master节点:kube-APIServer: 集群的控制中枢,各个模块之间信息交互都需要经过,同时它也是集群管理、资源配置、整个集群安全机制的入口。Controller-Manager: 集群的状态管理器,保证Pod或其他资源达到期望值,也是需要和apiserver。

weixin_74736986的博客 688

【K8S 五】使用kubeadm工具快速部署Kubernetes集群(Master高可用集群)

摘要:本文详细介绍了使用kubeadm工具部署Kubernetes高可用集群的完整过程。主要步骤包括:1) 准备3个Master节点和1个Worker节点的拓扑架构;2) 部署外部etcd集群和HAProxy负载均衡;3) 通过kubeadm初始化首个Master节点并配置网络插件Flannel;4) 将其他Master节点加入集群形成高可用控制平面;5) 将Worker节点加入集群。文中特别指出在Kubernetes 1.20.4版本中需要手动部署外部etcd集群的问题,并提供了详细的配置示例和操作命令。

刘元林的博客 1539

kubeadm部署 Kubernetes(k8s) 高可用集群 V1.28.2

Calico 在每一个计算节点利用 Linux Kernel 实现了一个高效的虚拟路由器( vRouter) 来负责数据转发,而每个 vRouter 通过 BGP 协议负责把自己上运行的 workload 的路由信息向整个 Calico 网络内传播。因为我们的K8S集群已经初始化过了,再添加其他master 节点到集群中,首要添加是把已经初始化过的证书拷贝到其他master 节点上。docker的默认工作路径在/var/lib/docker ,最好不修改默认存储路径,可以做软链接。

https://ophome.blog.youkuaiyun.com,在IT行业有多年的工作经验,尤其是在Python、Linux、负载均衡、Nginx和服务器运维等领域。 1195

kubeadm部署 Kubernetes(k8s) 高可用集群【V1.20 】

kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。

srebro.cn | 运维小弟 2526
上一篇: k8s快速入门教程
下一篇: k8s普通账号建立
cloud_engineer
博客等级 码龄5年 9390粉丝 65原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值