k8s高可用集群架構(快速搭建k8s集群)

發(fā)布時間:2023-11-08
本文主要介紹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及其新版本都將繼續(xù)啟用。
openapi v3kubernetes 1.24開始為api s openapi v3發(fā)布格式。
存儲容量和存儲卷擴展都歡迎存儲容量跟蹤的常用版本。當前可用的存儲容量通過csistoragecapacity對象公開,隨后綁定的csi存儲卷的pod被調度和增強。存儲卷擴展增加了重新調整現有持久卷的功能。
非優(yōu)先優(yōu)先迎來了穩(wěn)定版本。該函數為priorityclasses添加了一個新選項,可以打開或關閉pod搶占機制。
存儲插件遷移目前kubernetes開發(fā)團隊正在遷移樹中的存儲插件,希望在保持原有api正常效果的同時實現csi插件。azure磁盤和openstack cinder等插件已經遷移。
grpc探測升級到beta在1.24版本中,grpc探測功能已經進入beta階段,默認啟用?,F在,您可以在kubernetes中為您的grpc應用程序原生配置啟動、活動和就緒檢測,并且無需披露http業(yè)務戰(zhàn)或使用額外的可執(zhí)行文件。
kubelet證書提供程序升級到測試版。kubernetes版本中的alpha版本中首次出現的kubelet鏡像證書提供程序現在已經升級到了beta版本?,F在,kubelet將使用exec插件來動態(tài)檢索容器鏡像注冊表的憑證,而不是將憑證存儲在節(jié)點文件系統上。
避免服務的ip分配。kubernetes 1.24引入了一個新的可選功能,允許用戶為服務的靜態(tài)ip分配地址保留一個軟范圍。通過手動啟用此功能,群集將自動從您指定的服務ip池中獲取地址,從而降低風險。
也就是說,服務的clusterip可以有以下幾種分配動態(tài)分配,即集群會在配置的服務ip范圍內自動選擇一個空閑的ip。靜態(tài)分配意味著用戶需要在配置的服務ip范圍內指定一個ip。
服務群集ip是唯一的;因此,如果您嘗試使用分配的clusterip創(chuàng)建服務,將會返回錯誤結果。
環(huán)境準備本地現有的kubernetes 1.18環(huán)境,然后初始化環(huán)境。
# kubernetes當前版本[root @ k8s-01 ~]# kubectl get nodename狀態(tài)角色年齡版本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卸載集群命令。
#建議所有服務器執(zhí)行#!/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初始化環(huán)境-apiserver三節(jié)點kube-schedulet三節(jié)點kube-controller-manager三節(jié)點etcd三節(jié)點服務版本初始化環(huán)境需要所有節(jié)點執(zhí)行。
批量修改主機名,以及保密豁免。
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 #分發(fā)公鑰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*是/否發(fā)送 yesr exp _ continue } *密碼*發(fā)送 123456r 出口公司繼續(xù)} *密碼*發(fā)送 123456r } } 搞定,我這里的密碼是123456,請根據需要修改。
所有節(jié)點關閉selinux、iptables和交換分區(qū)。
停止防火墻禁用防火墻。;/swap/s/(。*)$/# 1/g ;/etc/fstab setenforce 0 sed-i/selinux =。*/selinux = disabled/ ;/etc/selinux/config所有節(jié)點配置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
#每個節(jié)點modprobe br _ netfilter modprobe ip _ conntrack設置上面的命令啟動,因為重啟后模塊失效,下面是啟動后自動加載模塊的。首先,使用以下內容創(chuàng)建一個新的/etc/rc.sysinit文件:
cat /etc/rc.sysiniteof#!/etc/sysconfig/modules/*中的/bin/bashfor文件。模塊;執(zhí)行[-x $ file] $ filedoneof,然后在/etc/sysconfig/modules/目錄中創(chuàng)建以下文件:
回聲報網絡過濾器/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然后重啟,模塊就可以自動加載了。
優(yōu)化內核參數
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 后面節(jié)點的/proc/sys/net/ip v4/ip _ forward done #根據需要修改bridge-nf,使netfilter可以過濾linux橋上的ipv4/arp/ipv6數據包。例如,在設置網之后。bridge . bridge-nf-call-iptables = 1,二樓的網橋在轉發(fā)數據包時也會被iptables的轉發(fā)規(guī)則過濾。常用選項包括:-net。bridge . bridge-nf-call-arptables:是否在arp tables的轉發(fā)中。過濾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標記的數據包。在所有節(jié)點上安裝ipv。
為什么用ipvs?從k8s的1.8版本開始,kube-proxy引入了ipvs模式,它基于netfilter和iptables,但是使用哈希表。因此,當服務數量達到一定規(guī)模時,哈希表查找的速度優(yōu)勢就會顯現,從而提高服務的服務性能。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 #檢查所需的內核模塊是否已正確加載,以及所有節(jié)點是否已安裝ips測試結果表明,ipset模式的效率將比iptables高100倍。
對于ipvs管理,請在此安裝ipvsadm。
yum install ipvsadm -y所有節(jié)點設置系統時區(qū)。
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需要升級并安裝在所有節(jié)點上。
#卸載原[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您可以通過將它們直接移動到相應的目錄并配置環(huán)境變量來使用它們。
如果docker通過yum安裝在我們的機器上,我們可以用下面的命令卸載它。
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-log rotary docker-log rotary docker-engine接下來,我們?yōu)槊颗_服務器配置containerd。
#創(chuàng)建配置文件目錄[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 #所有節(jié)點更改默認鏡像地址#我在這里用阿里云地址配置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-現在創(chuàng)建了從/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的啟動狀態(tài)● 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 級別=信息消息= 開始恢復狀態(tài)5月12日22 : 59 : 19 web 01 contain:時間= 2022-05-12t 22 : 59 : 19.154230615-04 : 00 級別=信息消息= 啟動事件監(jiān)視器 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。
需要在主節(jié)點上安裝#。首先,我們在原來的基礎上增加一個主機,只需要在主節(jié)點上執(zhí)行即可。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;}} #分發(fā)到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#在所有主節(jié)點上安裝修改過的配置文件。
router_id節(jié)點ipmcast_src_ip節(jié)點ipvirtual_ipaddress vip,請根據您ip的實際情況進行修改。
cat/etc/keepalived/keepalived . conf eof!keepalived global _ defs的配置文件{router _ id192.168.31.10 #節(jié)點ip,master每個節(jié)點配置自己的ip } vrrp _ script chk _ nginx { script /etc/keepalived/check _ port . sh 8443 區(qū)間2重量-20}。vrrp _實例_ 1 {狀態(tài)主接口eth 0 virtual _ router _ id 251 priority 100 advert _ int 1m cast _ src _ ip 192 . 168 . 31 . 10 #節(jié)點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節(jié)點的kube let設置為boot:
systemctl enable - now kubelet配置kubeadm文件
這里,我們在k8s-01上配置并打印init默認配置信息。
kubeadm config print init-defaults kubeadm-init . yaml雖然kube adm是etcd節(jié)點的管理工具,但請注意,kube adm并不打算支持此類節(jié)點的證書輪換或升級。長期計劃是使用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中的其他節(jié)點給我;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到其他主節(jié)點;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接下來,執(zhí)行kubectl,就可以看到node了。
[root @ k8s-01 ~]# ku bectl get nodename狀態(tài)角色年齡版本k8s-01就緒控制平面4m18s v1.24.0主節(jié)點配置我們已經為所有主節(jié)點配置了服務。
nginxkeeplivedcontainerd接下來只需要為其他主節(jié)點安裝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執(zhí)行節(jié)點添加。
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目前,我們的三個主節(jié)點已經添加完畢。
[root @ k8s-02 ~]# kubektl get nodename status roles age版本k8s-01就緒控制平面15mv1.24.0k8s-02就緒控制平面6m25s v1.24.0k8s-03就緒控制平面14m v1.24.0node節(jié)點配置節(jié)點節(jié)點安裝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節(jié)點,可以到k8s-01節(jié)點執(zhí)行以下命令獲取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狀態(tài)角色年齡版本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段,同樣的段應該設置在法蘭絨中。(默認情況下,我在這里有相同的配置)
執(zhí)行
[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創(chuàng)建后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訪問主機節(jié)點端口。
標簽:
節(jié)點版本
了解更多k8s高可用性集群架構(快速構建k8s集群)相關內容請關注本站點。
上一個:300V直流電和220V交流電那個更危險?在直接觸碰的過程中那個傷害比較厲害?
下一個:造價感覺入不了門?按工程造價基本學習方法慢慢學

硬盤壞了一般修起來多少錢,電腦硬盤壞了換一個硬盤得多少錢
剪力墻施工質量提高方法總結
6splus拍照怎么滿屏,iphone6s怎么縮放拍照畫面如何操作縮放拍照
英國sarclad離線鋼絞線狀態(tài)監(jiān)測系統scm
筆記本電腦哪種處理器好,本本什么CPU最好
古樹茶讓人著迷的山野韻,從何而來?
知乎點了喜歡怎么找(知乎點完喜歡的記錄在哪里)
茶的食療養(yǎng)生
山水盆景怎樣管理?
綠茶乙醇浸提技術研究
十八禁 网站在线观看免费视频_2020av天堂网_一 级 黄 色 片免费网站_绝顶高潮合集Videos