本文主要介绍k8s高可用性集群架构(快速构建k8s集群),下面一起看看k8s高可用性集群架构(快速构建k8s集群)相关资讯。
文章转载自:
背景kubernetes 1.24的新特性从kubelet中移除了dockershim。由于1.20版本被弃用,dockershim组件最终在1.24的kubelet中被删除。从1.24开始,需要使用其他支持的运行时选项(如containerd或cri-o);如果选择docker引擎作为运行时,需要使用cri-dockerd。
重要说明:对于kubelet和containerd,请在升级到1.24之前确认containerd版本。
#以下容器已经或将在运行时与kubernetes 1.24完全兼容:contained v1.6.4及更高版本,v1.5.11及更高版本cri-o 1.24及更高版本。如果cni插件没有升级和/或cni配置版本没有在cni配置文件中说明,containerd v1.6.0-v1.6.3版本将导致pod cni网络。containerd团队报告说,这些问题已经在containerd v1.6.4中得到解决。;t升级cni插件和/或声明cni配置版本,您可能会遇到错误,如不兼容的cni版本或无法删除沙箱的网络。
默认情况下,kubernetes 1.24 beta apis的新功能是关闭的。默认情况下,集群中不会启用新的测试版api。然而,在1.24中,默认情况下,所有原始测试版api及其新版本都将继续启用。
openapi v3kubernetes 1.24开始为api s openapi v3发布格式。
存储容量和存储卷扩展都欢迎存储容量跟踪的常用版本。当前可用的存储容量通过csistoragecapacity对象公开,随后绑定的csi存储卷的pod被调度和增强。存储卷扩展增加了重新调整现有持久卷的功能。
非优先优先迎来了稳定版本。该函数为priorityclasses添加了一个新选项,可以打开或关闭pod抢占机制。
存储插件迁移目前kubernetes开发团队正在迁移树中的存储插件,希望在保持原有api正常效果的同时实现csi插件。azure磁盘和openstack cinder等插件已经迁移。
grpc探测升级到beta在1.24版本中,grpc探测功能已经进入beta阶段,默认启用。现在,您可以在kubernetes中为您的grpc应用程序原生配置启动、活动和就绪检测,并且无需披露http业务战或使用额外的可执行文件。
kubelet证书提供程序升级到测试版。kubernetes版本中的alpha版本中首次出现的kubelet镜像证书提供程序现在已经升级到了beta版本。现在,kubelet将使用exec插件来动态检索容器镜像注册表的凭证,而不是将凭证存储在节点文件系统上。
避免服务的ip分配。kubernetes 1.24引入了一个新的可选功能,允许用户为服务的静态ip分配地址保留一个软范围。通过手动启用此功能,群集将自动从您指定的服务ip池中获取地址,从而降低风险。
也就是说,服务的clusterip可以有以下几种分配动态分配,即集群会在配置的服务ip范围内自动选择一个空闲的ip。静态分配意味着用户需要在配置的服务ip范围内指定一个ip。
服务群集ip是唯一的;因此,如果您尝试使用分配的clusterip创建服务,将会返回错误结果。
环境准备本地现有的kubernetes 1.18环境,然后初始化环境。
# kubernetes当前版本[root @ k8s-01 ~]# kubectl get nodename状态角色年龄版本k8s-01 ready master 243d v 1 . 18 . 3 k8s-02 ready master 243d v 1 . 18 . 3 k8s-03 ready master 243d v 1 . 18 . 3 k8s-04 re紫琳none 243d v 1 . 18 . 3 k8s-05 ready tone 243d v 1 . 18 . 3卸载集群命令。
#建议所有服务器执行#!/bin/bashkubeadm reset-fmodprobe-r ipiplsmodrm-rf ~/。kube/rm-rf/etc/kubernetes/rm-rf/etc/systemd/system/kube let . service . drm-rf/etc/systemd/system/kube let . service rm-rf/usr/bin/kube * rm-rf/etc/cnirm-rf/opt/cnirm-rf/var/lib/etcdyum-y remove kube adm * kube ctl * kube let * dock: 192 . 168 . 31 . 111域名apiserver.frps.cn,:。
api server . frps . cn : 6443为vipkube初始化环境-apiserver三节点kube-schedulet三节点kube-controller-manager三节点etcd三节点服务版本初始化环境需要所有节点执行。
批量修改主机名,以及保密豁免。
hostnamectl set-hostname k8s01 #所有机器修改bash #刷新主机名#配置hostcat/etc/100 k8s-01192 . 168 . 31 . 101 k8s-02192 . 31 . 102 k8s-03192 . 168 . 31 . 31 . 103 k8s-04192 . 168 . 31 .wget-o/etc/yum . r-7.repocurl-o/etc/yum . repos . d/c-7.repoyum install-ye expect #分发公钥ssh-keygen-trsa-p -f/root/。ssh/id _ rsa for iink 8s-01k 8s-02k 8s-03k 8s-04k 8s-05;do expect-c 生成ssh-copy-id -i /root/。ssh/id _ rsa . pub root @ $ i expected*是/否发送 yesr exp _ continue } *密码*发送 123456r 出口公司继续} *密码*发送 123456r } } 搞定,我这里的密码是123456,请根据需要修改。
所有节点关闭selinux、iptables和交换分区。
停止防火墙禁用防火墙。;/swap/s/(。*)$/# 1/g ;/etc/fstab setenforce 0 sed-i/selinux =。*/selinux = disabled/ ;/etc/selinux/config所有节点配置yum源。
curl-o/etc/yum . repos . d/c-7.repowget-o/etc/yum . r-7.repoyum clean all yum make cache新安装的服务器可以安装以下软件包,可以解决99%的依赖问题。
yum-y install gcc gcc-c make autoconf libtool-ltdl-devel gd-devel freetype-devel libxml 2-devel libjpeg-devel libpng-devel openssh-clients openssl-de vel curl-devel bison补丁libmcrypt-devel libmhash-devel ncurses-devel binutils compat-libstdc-33 elfutils-libelf elfutils-libelf-devel glibc glibc-common glibc-devel libgccl libaio lib gcc libstdc libstdc-devel unixodbc unixodbc-devel numatl-devel glibc-headers sudo bzip2 m locate flex lrzsz sysstat lsof setup tool syst em-config-network-tui system-config-firewall-tui nt sysv ntp pv lz4 dos 2 unix x2 dos rsync dstat io top innot top mytop telnet iftop expect cmake nc gnupl ot screen xorg-x11-utils xorg-x11
#每个节点modprobe br _ netfilter modprobe ip _ conntrack设置上面的命令启动,因为重启后模块失效,下面是启动后自动加载模块的。首先,使用以下内容创建一个新的/etc/rc.sysinit文件:
cat /etc/rc.sysiniteof#!/etc/sysconfig/modules/*中的/bin/bashfor文件。模块;执行[-x $ file] $ filedoneof,然后在/etc/sysconfig/modules/目录中创建以下文件:
回声报网络过滤器/etc/sys config/modules/br _ net filter。模块回声 modprobe ip _ conntrack /etc/sys config/modules/ip _ conntrack . modules增加权限。
chmod 755/etc/sys config/modules/br _ netfilter . moduleschmod 755/etc/sys config/modules/ip _ conntrack . modules然后重启,模块就可以自动加载了。
优化内核参数
catkubernetes . conf eof net . bridge . bridge-nf-call-iptables = 1 net . bridge-nf-call-ip 6 tables = 1 net . ip v4 . ip _ forward = 1vm . swap = 0 #禁止交换空间。只有当系统为oom时才能使用。vm.overcommit_memory=1 #不检查物理内存是否足够。vm . panic _ on _ oom = 0 # open oom fs . inotify . max _ user _ instances = 8192 fs . inotify . max _ user _ watches = 1048576 fs . file-max = 52706963 fs . nr _ open = 52706963 net . ipv6 . conf . all . disable _ ipv6 = net filter . nf _ conn track _ max = 2310720 eof cp kubernetes . conf/etc/sysctl . d/kubernetes .conf ssh root @ $ i echo 1 后面节点的/proc/sys/net/ip v4/ip _ forward done #根据需要修改bridge-nf,使netfilter可以过滤linux桥上的ipv4/arp/ipv6数据包。例如,在设置网之后。bridge . bridge-nf-call-iptables = 1,二楼的网桥在转发数据包时也会被iptables的转发规则过滤。常用选项包括:-net。bridge . bridge-nf-call-arptables:是否在arp tables的转发中。过滤bridge-net . bridge . bridge-nf-call-ip 6 tables的arp数据包:是否过滤ip 6 tables chain-net . bridge . bridge-nf-call-iptables:是否过滤iptables chain-net . bridge . bri edge-nf-filter-vlan-tagged:是否过滤iptables/arptables中vlan标记的数据包。在所有节点上安装ipv。
为什么用ipvs?从k8s的1.8版本开始,kube-proxy引入了ipvs模式,它基于netfilter和iptables,但是使用哈希表。因此,当服务数量达到一定规模时,哈希表查找的速度优势就会显现,从而提高服务的服务性能。ipvs依赖于nf_conntrack_ipv4内核模块,4.19包含了nf_conntrack,在1.13.1之前的kub测试,我就去加载nf_conntrack,用ipvs正常的cat/etc/sys config/modules/ipvs . modules of #!/bin/bashmodprobe-ip _ vsmodprobe-ip _ vs _ rrmodprobe-ip _ vs _ wrrmodprobe-ip _ vs _ shmodprobe-nf _ conntrackeofchmod 755/etc/sys config/modules/ipvs . modules bash/etc/sys config/modules/ipvs . modules lsmod | grep-e ip _ vs-e nf _ conntrack #检查所需的内核模块是否已正确加载,以及所有节点是否已安装ips测试结果表明,ipset模式的效率将比iptables高100倍。
对于ipvs管理,请在此安装ipvsadm。
yum install ipvsadm -y所有节点设置系统时区。
time date ctl set-time zone asia/shanghai #将当前utc时间写入硬件时钟timedatectl set-local-rtc 0 #重启系统时间相关服务system ctl restart r syslog system ctl restart crond升级内核(可选)。
rpm-import -gpg-key-elrepo.orgrpm-uvh www . el repo . org/el repo-release-7.0-3 . el 7 . el repo . no arch . rpm #默认安装的是最新的内核yum-enable repo = el repo-kernel install kernel-ml #修改内核顺序grub 2-set-default 0 grub 2-mkconfig-o/etc/grub 2 . cfg #使用以下命令查看默认内核是否启动指向上面安装的内核grubby - default-kernel#。这里的输出应该是我们升级后的内核信息reboot#。您可以在所有初始化步骤后重新启动,然后更新软件包版本。
yum update -ycontainerd已安装。在安装containerd之前,我们需要先升级libseccomp。centos7中,yum下载libseccomp的版本是2.3,版本不符合我们最新的containerd的要求。我们需要下载2.4以上的。
containerd需要升级并安装在所有节点上。
#卸载原[i4t @ web 01 ~]# rpm-qa | greplibsecliebseccomp-devel-2 . 3 . 1-4 . el7 . x86 _ 64 libseccomp-2 . 3 . 1-4 . el7 . x86 _ 64[i4t @ web 01 ~]# rpm。s[i4t @ web 01 ~]# rpm-e libseccomp-2 . 3 . 1-4 . -stream/baseos/. x86 _ 64/os/packages/libseccomp-2 . 5 . 1-1 . el 8 . x86 _ 64 . rpm #安装[i4t @ web 01 ~]# rpm-ivh libseccomp-2 . 5 . 1-1.el 8 . x86 _ 64...# # # # # # # # # # # # # # # # # # # # # # # # #[100%]更新/安装...1 :libseccomp-2 . 5 . 1-1 . el8 # # # # # # # # # # # # # # # # # # # #[100%]#查看当前。grep libseccomplibseccomp comp-2 . 5 . 1-1 . el 8 . x86 _ 64下载并安装contain:
对于containerd安装,我们使用版本号1.6.1。
containerd-1.6.1-linux-amd64.tar.gz只包含container dcri-container d-cni-1 . 6 . 4-linux-amd64 . tar . gz ;的相关工具包,包括containerd和cri runc。建议下载这个包。
#下载tar.gz包#containerd工具包,包括wget echo20如cri runc-@ . com github . com/container d/container d/releases/download/v 1 . 6 . 4/cri-container d-cni-1 . 6 . 4-lin。ux-amd64.tar.gz#备选下载地址wget . frps . cn/file/kubernetes/container d/cri-container d-cni-1 . 6 . 4-linux-amd64 . tar . gz工具包文件如下。
#cri-containerd-cni将下载我们所有与containerd相关的依赖项[root @ k8s-01 container]# tarzxvf cri-container d-cni-1 . 6 . 4-linux-amd64 . tar . gz-c/# let直接要求它替换etc/etc/systemd/etc/systemd/system/etc/system/container d . service etc/crictl . yamletc/cni/etc/cni/net . d/etc/10-container d-net . conflistusr/usr/local/usr/local/sbin/usr/local/sbin/runcusr/local/bin/usr/local/local/bin/ctd-decoder usr/local/bin/ctd-ctr usr/localce/cloud-init/node . yaml opt/container d/cluster/gce/cloud-init/master . yaml opt/cni/opt/cni/bin/opt/cni/bin/portmapopt/cni/bin/host-local opt/cni/bin/ipvlanopt/cni/bin/host-device opt/cni/bin/vr fopt/cni/bin/bin/static opt/cni/bin/tuning opt/cni您可以通过将它们直接移动到相应的目录并配置环境变量来使用它们。
如果docker通过yum安装在我们的机器上,我们可以用下面的命令卸载它。
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-log rotary docker-log rotary docker-engine接下来,我们为每台服务器配置containerd。
#创建配置文件目录[root @ k8s-01 ~]# mkdir/etc/container d-p #生成默认配置文件[root @ k8s-01 ~]# container dconfig default/etc/containerd/config.toml #-config,-c该路径可以在守护进程启动时更改#配置文件的默认路径在/etc/container d/config . toml中,而不是默认的暂停镜像地址。
默认情况下,k8s.gcr.io是的,就用我提供的阿里云镜像仓库地址吧。
sed-i和;;s/k8s . gcr . io/registry . cn-beijing . aliyuncs . com/abc docker/ ;/etc/containerd/config.toml #所有节点更改默认镜像地址#我在这里用阿里云地址配置syste。md作为容器组驱动程序
sed-i和;;s/systemdc group = false/systemdc group = true/ ;/etc/containerd/config . toml containerd官方操作手册。
默认的cri-containerd-cni包会包含containerd启动脚本,我们已经提取到相应的目录下,可以直接调用启动。
[root @ k8s-01 ~]# system ctl enable containerd-现在创建了从/etc/systemd/system/multi-user . target . wants/container d . service到/etc/systemd/system/container d . service的符号链接[root @ k8s-01 ~]# system ctl status container d #检查container d的启动状态● containerd.service-contain:加载(/etc/systemd/system/container d . servic:禁用)activ:活跃(运行)自周四2022-05-12 22 : 59 : 19 edt;3s前docs: container d . io proc: 30048 execstartpre =/sbin/modprobe overlay(code = exited,status=0/succ: 30050(contain: 24.5m cgroup:/system . slice/container d . service └─30050/usr/local/bin/container d may12 22 : 59 : 19 web 01 contain:时间= 2022-05-12t 22 : 59 : 19.153514446-04 : 00 级别=信息消息= 获取镜像文件系统路径 /var/lib/container d/io . container d . snapshot ter . v1 . overlay fs 5月12日22 : 59 : 19 web 01 contain:时间= 2022-05-12t 22 : 59 : 19.154085898-04 : 00 级别=信息消息= 开始订阅containerd事件 ma y 12 22 : 59 : 19 web 01 contain:时间= 2022-05-12t 22 : 59 : 19.154137039-04 : 00 级别=信息消息= 开始恢复状态5月12日22 : 59 : 19 web 01 contain:时间= 2022-05-12t 22 : 59 : 19.154230615-04 : 00 级别=信息消息= 启动事件监视器 5月12日22 : 59 : 19 web 01 contain:时间= 2022-05-12t 22 : 59 : 19.154276701-04 : 00 级别=信息消息= 开始快照同步 5月12日22 : 59 : 19 web 01 contain:时间= 2022-05-12t 22 : 59 : 19.154299287-04 : 00 级别=信息消息= 启动默认cni网络会议同步程序5月12日22 : 59 : 19 web 01 contain:时间= 2022-05-12t 22 : 59 : 19.154316094-04 : 00 级别=信息消息= 启动流媒体服务器 5月12日22 : 59 : 19 web 01 contain:时间= 2022-05-12t 22 : 59 : 19.154675632-04 : 00 级别=信息消息=服务...address =/run/container d/container d . sock . tt rpc may 12 22 : 59 : 19 web 01 contain:时间= 2022-05-12t 22 : 59 : 19.154755704-04 : 00 级别=信息消息=服务...address =/run/container d/container d . sock may 12 22 : 59 : 19 web 01 contain:时间= 2022-05-12t 22 : 59 : 19.155220379-04 : 00 level = infomsg = 在0.027654秒内成功引导ctr在我们的解压包里。
[root@k8s-01 ~]# ctr版本cli: # ctr版本号v: v 1 . 6 . 4 r: 212 e 8 b 6 fa 2 f 44 b 9 c 21 b 2798135 fc 6 f 7 c 53 : go 1 . 17 . 9服务器: v: v 1 . 6 . 4 # contain: 212 e8 b 6 fa 2 f 44 b 9 c 21 b 2798135 fc 6 f 7 b 53 : b 376d 7 b 6-c97e-4b 39-8144-9624 a de 3ba 84 #您可以使用以下命令查看containerd版本号[root @ k8s-01 ~]# container d-version container d github.com/containerd/.包含的v 1 . 6 . 4 212 e8 b 6 fa f2 f 44 b 9 c 21 b 2798135keeplived充当vip。
需要在主节点上安装#。首先,我们在原来的基础上增加一个主机,只需要在主节点上执行即可。cat/etc/hostseof 192 . 168 . 31 . 10 k8s-master-01192 . 168 . 31 . 11 k8s-master-02192 . 168 . 31 . 12 k8s-er . frps . cn安装nginx
为了方便后面的扩展插件,我在这里用编译安装nginx。
#编译安装nginx #安装依赖于yum install pcre pr-devel openssl openssl-devel gcc gcc-c automake autoconflibtool mak-1 . 20 . 2 . tar . gz tar xf nginx-1.20.2.tar.gz cd nginx-1 . 20 . 2/user添加nginx-s/sbin/nologin-m ./configure-prefix =/opt/nginx/-with-pcre-with-http _ ssl _ module-with并设置启动cat/usr/lib/systemd/system/nginx . service of #/usr/lib/systemd/system/nginx . service[unit]。description = nginx http和反向代理服务器after = network . target sshd-keygen . service[service]type = forking environment file =/etc/sys config/sshd execstartpre =/opt/nginx/sbin/nginx/conf/nginx . conf execstart =/opt/nginx/sbin/nginx/conf/nginx/conf/nginx . conf exec reload =/opt/nginx/sbin/nginx-s reload execstop =/opt/nginx/surerestartsec = 42s[install]wanted by = multi-user . target of # boot up[root @ k8s-01 ginx-1 . 20 . 2]# system ctl enable nginx-now created symlink from/etc/systemd/system/multi-user . target . wants/nginx . service to/usr/lib/systemd/system/nginx . service . # yum安装nginx yum安装nginx -y #yum安装nginx,请注意以下配置文件路径:/etc/nginx/conf/conf
[root @ k8s-01 nginx-1 . 20 . 2]# ps-ef | grep nginxroot 84040 1 0 20 : 15?00 : 00 : 00 nginx:主进程/opt/nginx/sbin/nginx-c/opt/nginx/conf/nginx . confn obody 84041 84040 0 0 20 : 15?00 : 00 : 00 nginx:工人processroot 84044 51752 0 20 : 16 pts/000 : 00 grep-color = auton ginx修改nginx配置文件。
vim nginx.conf用户nginx nginxworker_processes自动;事件{ worker _ connections 20240使用epoll} error _ log/var/log/nginx _ error . log info;流{上游kube-servers { hash $ remote _ addr consistent;服务器k8s-master-01: 6443 weight = 5 max _ fails = 1 fail _ time out = 3s;#你可以在这里写ip服务器k8s-master-02 : 6443 weight = 5 max _ failures = 1 fail _ time out = 3s;服务器k8s-master-03 : 6443 weight = 5 max _ fails = 1 fail _ time out = 3s;} server { listen 8443 reuseportproxy _ connect _ timeout 3s#增加超时proxy _ timeout 3000sproxy _ pass kube-servers;}} #分发到k8s-02k 8s-03do scp nginx . conf root@$i:/opt/nginx/conf/ ssh root @ $ i system ctl重启nginx done配置keeplived。正如我们前面所说的,高可用性方案需要一个vip用于集群的内部访问。
yum install -y keepalived#在所有主节点上安装修改过的配置文件。
router_id节点ipmcast_src_ip节点ipvirtual_ipaddress vip,请根据您ip的实际情况进行修改。
cat/etc/keepalived/keepalived . conf eof!keepalived global _ defs的配置文件{router _ id192.168.31.10 #节点ip,master每个节点配置自己的ip } vrrp _ script chk _ nginx { script /etc/keepalived/check _ port . sh 8443 区间2重量-20}。vrrp _实例_ 1 {状态主接口eth 0 virtual _ router _ id 251 priority 100 advert _ int 1m cast _ src _ ip 192 . 168 . 31 . 10 #节点ip nopreempt au考虑事项{ auth _ typepassauth _ pass 1111111 } track _ script { chk _ nginx } virtual _ ip address { 192 . 168 . 31 . 111 # vip } } eof #编写健康检查脚本vim/etc/keepalived/check _ port . sh chk _ port = $ 1 if[-n chk港];然后port _ process = ` ss-lt | grep $ chk _ port | wc-l ` if[$ port _ process-eq 0];然后回声 端口$ chk _端口未被使用,结束。 从1号出口出去检查端口不能为空! 菲,开始保持活力
systemctlenable-now keepalived 测试 vip正常吗?
ping vipping apiserver.frps.cn #我们的域名kubeadm安装配置首先我们需要配置k8s-01中的kubeadm源码。
以下kubeadm操作只需在k8s-01上进行。
国内来源
这里packages.cloud.google.com什么都知道,下面改成阿里云源码。
cat eof/etc/yum . repos . d/kubernetes . repo[kubernetes]name = kubernetes base url = mirrors . aliyun . com/kubernetes/yum/repos/kubernetes-el7-x86 _ 64 enabled = 1 gpg check = 0 repo _ gpg check = 0 gpgk yum-key . gpg mirrors . aliyun . com/kubernetes/yum/doc/rpm-package-key . gpg eof官方文档推荐来源。
cat eof | sudo tee/etc/yum . repos . d/kubernetes . repo[kubernetes]name =俱吠罗netesbaseurl = packages . cloud . google . com/yum/repos/kubernetes-el7-$ basearcnabled = 1 gpg check = 1 repo _ gpg check = 1 gpg key = packages . cloud . google . com/yum/doc/yum-key . gpgecheo 20-@ .com packages . cloud . google . com/yum/doc/rpm-package-key . gpgexclude = ku elet kube adm kubet
yum install-y kubelet-1 . 24 . 0 kube adm-1 . 24 . 0 kubectl-1 . 24 . 0-disable exclusions = kubernetes将k8s-01节点的kube let设置为boot:
systemctl enable - now kubelet配置kubeadm文件
这里,我们在k8s-01上配置并打印init默认配置信息。
kubeadm config print init-defaults kubeadm-init . yaml虽然kube adm是etcd节点的管理工具,但请注意,kube adm并不打算支持此类节点的证书轮换或升级。长期计划是使用etcdadm作为管理工具。
因为我要在这里做集群,所以请根据我这里的配置,根据需要进行修改。
[root@k8s-01 ~]#猫kub: kub:-groups:-system :bootstrappers: kubeadm: d: abcdef . 0123456789 abcd: 24h 0 m0s usag:-签名-认证在kind: init configuration localapi: adv: 192 . 168 . 31 . 10 # k8s-01 ip地址bindport: 6443 nod: crisock: unix:///var/run/containerd/ container d . sock imagepullpolicy: if not present name : k8s-01 tains: null-apiserver: time out for controllane: 4 msopiversion: kub: 10 . 244 . 0 . 0/16 sch: { }-apiv: kubeproxy.config.k8s.io/ v1 alpha 1 kind: kub: ipvs # kube-proxy mode-kubelet.config.k8s.io/, apiv: v1 beta 1 authentication: anonymous : enabled : false webhooketchettl: 0s enabled : true x509 echo344-@.com 0s kind: kubeletconfiguration cgroupdriv: systemd # configuration cgroupdriv: { } m: { } nodestatusreportfrequency: 0s nodestatusupdatefrequency: 0s rotatecertificat: true runtimerequesttimeoute cho 34-@ . com 0s shutdowngraceperiodcriticalpods: 0s staticpodpath:/etc/kubernetes/manifests streamingconnectionidletimeout: 0s syncfrequency : 0s volumestat
[root @ k8s-01 ~]# kube adm init-config kube adm-init . yaml-dry-run正确如下。
提前拉镜像
[root@k8s-01 ~]# kubeadm配置图片列表-config kube adm-init . yaml k8s.gcr.io/kub:v1.24.0k8s.gcr.io/ kube-controller-manager : v 1.24 . 0k8s . gcr . io/kube-schedule : v 1.24 . 0k8s . gcr . io/kube-proxy : v 1.24 . 0k8s . gcr . io/pause:s.gcr.io/coredns/cor: d.frps.cn/file/kubernetes/image/k8s _ all _ 1.24.tar #复制到k8s-02 k8s-03 k8s-04 k8s-05中的其他节点给我;do scp k8s _ all _ 1.24.tar root@$i:/root/ ssh root @ $ ictr-nk8s . io ii import k8s _ all _ 1.24.tar done check。
[root @ k8s-01 ~]# ctr-n k8s . io i ls-qk8s . gcr . io/coredns/coredns: v 1 . 8 . 6k 8s . gcr . io/etc d: 3 . 5 . 3-0k8s . gcr . io/kube-api server: v 1 . 24 . 0 k8s . gcr . io/kube-controller-manager echo
kubeadm不会安装或管理kubelet,所以kubectl需要确保他们的kubeadm和kubernetes版本匹配。如果没有,就有版本偏差的风险。不过,支持kubelet和k8s之间的小版本偏差,但kubelet的版本可能永远不会超过api服务器的版本。
#下载1.24.0 kubectl工具[root @ k8s-01 ~]# curl-lo[root @ k8s-01 ~]#/local/bin/ #检查kubectl工具的版本号[root @ k8s-01 ~]# ku bectl version-client-output = yaml cli: builddat: 2022-05-03t 13 : 46 : 05z 编译r: gc gitcommit: 4 ce 5a 8954017644 c 5420 bae 81d 72 b 09 b 735 c 21 f 0 gittr:清洁gitv: v 1 . 24 . 0 gov: go 1 . 18 . 1 major: 1 minor: 24 platform: linux/amd64 kustomiz: v 4 . 5 . 4 #为k8s-02 k8s-03中的i复制kubectl到其他主节点;doscp/usr/local/bin/ku bectl root@$i:/usr/local/bin/kubectl ssh root @ $ ichmodx/usr/local/bin/ku bectl完成下一次启动初始化。
[root @ k8s-01 ~]# kube adm init-config kube adm-init . yaml-upload-certs初始化流程
初始化完成
记住init之后打印的token,复制kubectl的kubeconfig。kubectl的kubeconfig路径是~/。默认为kube/config。
由mkdir-p $ home/初始化的配置文件。kube cp-i/etc/kubernetes/admin . conf $ home/。kube/config chow $(id-u): $(id-g)$ home/。kube/config保存在配置图中。
库贝系统tem get cm kubeadm-config -o yaml接下来,执行kubectl,就可以看到node了。
[root @ k8s-01 ~]# ku bectl get nodename状态角色年龄版本k8s-01就绪控制平面4m18s v1.24.0主节点配置我们已经为所有主节点配置了服务。
nginxkeeplivedcontainerd接下来只需要为其他主节点安装k8s组件。
cat eof/etc/yum . repos . d/kubernetes . repo[kubernetes]name = kubernetes baseurl = mirrors . aliyun . com/kubernetes/yum/repos/kubernetes-el7-x86 _ 64 enabled = 1 gpg check = 0 repo _ gpg check = 0 gpg key = mirrors . aliyun . com/kubernetes/yum/doc/yum-key . gpg mirrors . aliyun . com
yum install-y kubelet-1 . 24 . 0 kube adm-1 . 24 . 0 kubectl-1 . 24 . 0-disable exclusions = kubernetes启动kube let。
system ctl enable-现在kubeletmaster执行节点添加。
kube adm join api server . frps . cn : 8443-token abcdef . 0123456789 abcdef-discovery-token-ca-cert-hash sha 256 : a54 c 17 e 514 edba 57226 f 969268227 b 749d 8 bfb 8802 ae 99112 e 08 cbcabcd 22 ae 0-控制平面-证书-密钥f 7 b 0 eb 9 c 7c9fb04461250设置kubectl配置文件
mkdir-p $ home/。kube sudocp-i/etc/kubernetes/admin . conf $ home/。kube/config sudo chow $(id-u): $(id-g)$ home/。kube/config目前,我们的三个主节点已经添加完毕。
[root @ k8s-02 ~]# kubektl get nodename status roles age版本k8s-01就绪控制平面15mv1.24.0k8s-02就绪控制平面6m25s v1.24.0k8s-03就绪控制平面14m v1.24.0node节点配置节点节点安装kubeadm
cat eof/etc/yum . repos . d/kubernetes . repo[kubernetes]name = kubernetes baseurl = mirrors . aliyun . com/kubernetes/yum/repos/kubernetes-el7-x86 _ 64 enabled = 1 gpg check = 0 repo _ gpg check = 0 gpg key = mirrors . aliyun . com/kubernetes/yum/doc/yum-key . gpg mirrors . aliyun . com
yum install-y kube adm-1 . 24 . 0-disable exclusions = kubernetes add join命令。
kube adm join api server . frps . cn : 8443-token abcdef . 0123456789 abcdef-discovery-token-ca-cert-hash sha 256 :a 54 c 17 e 514 edba 57226 f 969268227 b 749d 8 bfb 8802 ae 99112 e 08 cbcabcd 22 ae 0如果后面需要添加nod,e节点,可以到k8s-01节点执行以下命令获取token的相关信息。
[root @ k8s-01 ~]# kube adm token create-print-join-command kube adm join api server . frps . cn : 8443-token sgv cen . qf 87 ykht 9 gopqe 0d-discovery-token-ca-cert-ha shsha 256 : 535 fdf 0 af 19022 a 30760 fd 5069 c 648019 a3 f 4 b 4828 bfb 2 eb 5666
验证所有服务器都已添加到群集。
[root @ k8s-01 ~]# ku bectl get node-o widename状态角色年龄版本internal-ip external-ip os-image内核-版本容器-runtimek8s-01就绪控制平面22m v 1 . 24 . 0 192 . 168 . 31 . 10 none centos linux 7(核心)5 . 17 . 8-1 . el7 . el repo . x86 _ 64 contain:// 1 . 6 . 4 k8s-02就绪控制平面13m v 1 . 24 . 0 199. 8-1 . el7 . el repo . x86 _ 64 contain://1.6.4k8s-05就绪none 6m6s v 1 . 24 . 0 192 . 168 . 31 . 14 none centos linux 7(核心)3 . 10 . 0-1160 . 62 . 1 . el7 . x86 _ 64 contain://1.6.4网络配置其实集群可以 此时不能正常使用,因为还没有安装网络插件,接下来安装网络插件。你可以在文档 kubernetes . io/docs/setup/production-environment/tools/kube adm/create-clust-flannel.yml wget根据需求修改网卡配置,我这里主要用eth0。
contain:-nam: kub: quay.io/coreos/ flannel: v0 . 12 . 0-amd64 command:-/opt/bin/flann:--ip-masq--kube-subnet-mgr--ifac:在kubeadm.yaml文件中设置了一个podsubnet段,同样的段应该设置在法兰绒中。(默认情况下,我在这里有相同的配置)
执行
[root @ k8s-01 ~]# kubetlapply-fkube-法兰绒. ymlcni插件问题默认情况下,contained也会有一个cni插件,但是我们已经安装了法兰绒,所以需要使用法兰绒 的cni插件,并在包含的cni配置文件中添加注释,否则这两个配置将会。
因为如果这个目录下有多个cni配置文件,kubelet会使用文件名字典顺序中的第一个作为配置。文件,所以之前的默认选择是使用containerd-net插件。
mv/etc/cni/net . d/10-container d-net . conflist/etc/cni/net . d/10-container d-net . conf list . bak ifconfig cni 0 down ip链接删除cni 0 system ctl daemon-reload system ctl重启contain测试是否正常。
cate of | kubectl apply-f -apiv: apps/v1kind: d: nam: nginxspec: selector: matchlab: app: nginx template : metadata : label : nginx spec: containers :-image: nginx: name: nginx portsecho344-@.com-protocol: tcp port: 80 targ: 80 nod: 30001-apiv: v1kind: podm: name : busybox namespace : defaultspec: containers : busybox image: abc docker 9/centos : v1 command cho 34-@ . com-sleep- 3600 imagepullpolicy:如果不在场,restartpolicy:总是在pod创建后eof,我们会检查它。
使用nslookup看看能否返回地址。
[root @ k8s-01 ~]# ku bectl exec-ti busybox-nslookup kub: 10.96.0.10addr: 10 . 96 . 0 . 10 # 53nam: kubernetes.default.svc.cluster.localaddr: 10 . 96 . 0 . 1 测试ngixsvc和pod内网通信正常?
对于k8s-01k 8s-02k 8s-03k8s-04k 8s-05do ssh root @ $ i curl-s 10 . 99 . 209 . 220 # nginxsvcipssh root @ $ i curl-s 10 . 244 . 3 . 4 # pod ip done访问主机节点端口。
标签:
节点版本
了解更多k8s高可用性集群架构(快速构建k8s集群)相关内容请关注本站点。