Kubeadm部署HA的Kubernetes集群
部署HA的Kubernetes集群 前提条件
准备好系统环境、安装好docker并启动服务和安装好kubeadm、kubectl和kubelet程序包三步。
系统环境要求各节点时间同步,可以使⽤chronyd服务;各节点关闭防⽕墙;
CentOS 7:systemctl stop firewalld.service && systemctl disable firewalld.service
Ubuntu 18.04:ufw disable各节点禁⽤Swap设备~#swapoff-a ~#sed-i"s@^[^#].*swap@#&@"/etc/fstab确保节点MAC地址和procut_id的惟⼀性
安装运⾏Docker
Docker的配置⽂件⽰例{ "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2", "registry-mirrors":["https://4mii0w1b.mirror.aliyuncs.com", "https://docker.mirrors.ustc.edu.cn", "https://registry.docker-cn.com"] }
安装kubeadm、kubectl和kubelet程序包初始化控制平⾯
初始化过程⼤体可分为三步:初始化控制平⾯第⼀个节点;配置kubectl命令的管理员配置;部署⽹络插件;
运⾏kubeadm init命令
kubeadm init可从命令⾏选项或配置⽂件读取配置信息,本⽰例采⽤命令⾏壬的⽅式。⾸先,在第⼀个控制节点上运⾏如下命令进⾏初始化。~$ sudo kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.1 --control-plane-endpoint k8s-api.ilinux.io --apiserver-advertise-address 172.29.9.1 --pod-network-cidr 10.244.0.0/16 --token-ttl 0
各选项的意义:--image-repository:指定要使⽤的镜像仓库;--kubernetes-version:kubernetes程序组件的版本号,应该与kubelet的版本号相同;--control-plane-endpoint:控制平⾯的固定访问端点,可以是IP地址或DNS名称,会被⽤于集群管理员及集群组件的kubeconfig配置⽂件的API Server的访问地址;单控制平⾯部署时可以不使⽤该选项;--pod-network-cidr:Pod⽹络的地址范围,其值为CIDR格式的⽹络地址,flannel⽹络插件的默认为10.244.0.0/16,calico插件的默认值为192.168.0.0/16;--service-cidr:Service的⽹络地址范围,其值为CIDR格式的⽹络地址,默认为10.96.0.0/12;--apiserver-advertise-address:apiserver通告给其它组件的IP地址,⼀般应该为Master节点的⽤于集群内部通信的IP地址,0.0.0.0表⽰节点上所有可⽤地址;--token-ttl:共享令牌(token)的过期时⻓,默认为24⼩时,0表⽰永不过期;为防⽌不安全存储等原因导致的令牌泄露危及到集群安全,建议为其设定过期时⻓;
该命令成功执⾏的最后会返回如下的结果,⽤于提⽰后续的操作步骤:
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 k8s-api.ilinux.io:6443 --token 994tce.8elc2p7zjg9tp8wf --discovery-token-ca-cert-hash sha256:cf12deca4e52fabe8e0ddd681dbc60fea4bf3f3001ce4f33a240e170ed459363 --control-plane
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join k8s-api.ilinux.io:6443 --token 994tce.8elc2p7zjg9tp8wf --discovery-token-ca-cert-hash sha256:cf12deca4e52fabe8e0ddd681dbc60fea4bf3f3001ce4f33a240e170ed459363
⽣成kubectl命令的管理员配置
建议以Linux系统的普通⽤⼾⾝份执⾏后续操作,以ilinux为例,⾸先创建账号
~# useradd -m -s /bin/bash ilinux
~# echo -e "mageedu mageedu" | passwd ilinux
~# echo "ilinux ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/ilinux
接下来复制kubectl命令的管理配置⽂件给ilinux⽤⼾:
~# su - ilinux
~# mkdir -p $HOME/.kube
~# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
~# sudo chown $(id -u):$(id -g) $HOME/.kube/config
测试该命令的执⾏:
~$ kubectl get nodes
部署⽹络插件
Kubernetes以插件⽅式⽀持众多第三⽅的Pod⽹络实现,著名有flannel和calico等。本⽂以flannel为例进⾏说明。
~$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
添加⼯作节点
在每个⼯作节点上分别执⾏如下命令即可加⼊到指定的控制平⾯中,kubeadm的执⾏需要⽤到root⽤⼾的权限。
~# kubeadm join k8s-api.ilinux.io:6443 --token 994tce.8elc2p7zjg9tp8wf --discovery-token-ca-cert-hash sha256:cf12deca4e52fabe8e0ddd681dbc60fea4bf3f3001ce4f33a240e170ed459363
回到kubectl节点上,验证添加的结果:
~# kubectl get nodes添加其它控制平⾯节点
控制平⾯中的节点需要共享Kubernetes CA、etcd CA和front-proxy CA等的证书和私钥信息,我们可以从第⼀个控制平⾯节点之上⼿动分发相关⽂件给准备添加的其它Master,也可借助于kubeadm init中的⼀个特定操作步骤完成。
回到第⼀个控制平⾯节点执⾏如下命令,并获取其返回结果,尤其注意最后的certificate key。
~$ sudo kubeadm init phase upload-certs --upload-certs W0423 13:48:05.271436 22360
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:
4977c9110f2abfd95fc9aa29a382064cb24a04ec9123b74f7bb273850d664e4c
注意:该命令上传⽣成的Secret的⽣命周期为两个⼩时,超过该时⻓后再添加Master节点,需要重新运⾏如上命令。
接下来在待添加为Master的节点上分别执⾏如下命令,完成添加,命令格式来⾃前⾯两个kubeadm init的结果输出。
~# kubeadm join k8s-api.ilinux.io:6443 --token 994tce.8elc2p7zjg9tp8wf --discovery-token-ca-cert-hash sha256:cf12deca4e52fabe8e0ddd681dbc60fea4bf3f3001ce4f33a240e170ed459363 --control-plane --certificate-key
4977c9110f2abfd95fc9aa29a382064cb24a04ec9123b74f7bb273850d664e4c
该命令最后会返回如下结果:
This node has joined the cluster and a new control plane instance was created:Certificate signing request was sent to apiserver and approval was received.The Kubelet was informed of the new secure connection details.Control plane (master) label and taint were applied to the new node.The Kubernetes control plane instances scaled up.A new etcd member was added to the local/stacked etcd cluster.
To start administering your cluster from this node, 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
Run "kubectl get nodes" to see this node join the cluster.
添加的每个节点本地都可以配置kubetl命令⾏⼯具,该配置会⽣成同样具有管理员权限的kubeconfig配置⽂件,如上⾯命令的返回结果所⽰。另外,若需要测试本地节点的⼯作效果,可以修改/etc/hosts中的k8s-api.ilinux.io的名称解析指向当前Master的IP,⽽后于本地运⾏kubectl命令进⾏测试。
~$ kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-master01.ilinux.io Ready master114m v1.18.1 k8s-master02.ilinux.io Ready master 5m15s v1.18.1 k8s-master03.ilinux.io Readymaster 3m2s v1.18.1 k8s-node01.ilinux.io Ready 100m v1.18.1 k8s-node02.ilinux.io Ready 100mv1.18.1 k8s-node03.ilinux.io Ready 99m v1.18.1
升级HA的Kubernetes集群 查找是否有可升级的版本
获取当前版本
~$ kubectl version
~# kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.1",
GitCommit:"7879fc12a63337efff607952a323df90cdc7a335", GitTreeState:"clean",
BuildDate:"2020-04-08T17:36:32Z", GoVersion:"go1.13.9", Compiler:"gc",
Platform:"linux/amd64"}
上⾯命令返回结果显⽰当前版本是v1.18.1,下⾯查看是否存在可升级版本
~# apt update
~$ sudo apt-cache madison kubeadm
kubeadm | 1.18.2-00 | https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial/main amd64Packages kubeadm | 1.18.1-00 | https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial/main amd64 Packages kubeadm | 1.18.0-00 | https://mirrors.aliyun.com/kubernetes/aptkubernetes-xenial/main amd64 Packages
……
以可升级到的命令中的最新版本v1.18.2为例。
升级控制平⾯
升级第⼀个控制平⾯节点
先升级kubeadm程序包,并确认升级完成。
~# apt-get update && apt-get install -y --allow-change-held-packages kubeadm=1.18.2-00
~# kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.2",
GitCommit:"52c56ce7a8272c798dbc29846288d7cd9fbae032", GitTreeState:"clean",
BuildDate:"2020-04-16T11:54:15Z", GoVersion:"go1.13.9", Compiler:"gc",
Platform:"linux/amd64"}
排空当前节点。
~$ kubectl drain k8s-master01.ilinux.io --ignore-daemonsets
node/k8s-master01.ilinux.io cordoned WARNING: ignoring DaemonSet-managed Pods: kube-system/kube-flannel-ds-amd64-dltsg, kube-system/kube-proxy-mvjr5 evicting pod kube-system/coredns-7ff77c879f-8wkrt evicting pod kube-system/coredns-7ff77c879f-n6c7hpod/coredns-7ff77c879f-8wkrt evicted pod/coredns-7ff77c879f-n6c7h evicted node/k8s-master01.ilinux.io evicted
运⾏如下命令,开启升级计划。
~# kubeadm upgrade plan
该命令会返回类似如下的升级提⽰。
Components that must be upgraded manually after you have upgraded the control plane with"kubeadm upgrade apply": COMPONENT CURRENT AVAILABLE Kubelet 6 x v1.18.1 v1.18.2
Upgrade to the latest version in the v1.18 series:
COMPONENT CURRENT AVAILABLE API Server v1.18.1 v1.18.2 Controller Manager v1.18.1 v1.18.2Scheduler v1.18.1 v1.18.2 Kube Proxy v1.18.1 v1.18.2 CoreDNS 1.6.7 1.6.7 Etcd 3.4.3 3.4.3-0
You can now apply the upgrade by executing the following command:kubeadm upgrade apply v1.18.2
按照上⾯的提⽰,将集群升级到v1.18.2版本。该命令也会同时更新证书信息,阻⽌证书更新,可同时附加"--certificate-renewal=false"选项。
~# kubeadm upgrade apply v1.18.2
……
[upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.18.2". Enjoy!
[upgrade/kubelet] Now that your control plane is upgraded, please proceed with upgrading your
kubelets if you haven"t already done so.
关闭该节点的不可作为调度⽬标的标识。
~$ kubectl uncordon k8s-master01.ilinux.io node/k8s-master01.ilinux.io uncordoned
升级控制平⾯的其它节点
步骤同升级第⼀个节点相同,除了其中的"kubeadm upgrade apply"命令要替换为"kubeadm
upgrade node"命令。因⽽按前⼀节的步骤和本切的提⽰依次升级余下的每个Master节点即可。
为控制平⾯的所有节点升级kubectl和kubelet
在控制平⾯的所有节点上执⾏如下命令,并重启kubelet服务,完成程序版本更新。
~# apt-get update && apt-get install -y --allow-change-held-packages kubelet=1.18.2-00
kubectl=1.18.2-00
~# systemctl restart kubelet
使⽤下⾯的命令验证更新结果:
~$ kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-master01.ilinux.io Ready master167m v1.18.2 k8s-master02.ilinux.io Ready master 58m v1.18.2 k8s-master03.ilinux.io Readymaster 55m v1.18.2 k8s-node01.ilinux.io Ready 153m v1.18.1 k8s-node02.ilinux.io Ready 153mv1.18.1 k8s-node03.ilinux.io Ready 152m v1.18.1
升级⼯作节点
应该以灰度⽅式进⾏,⼀次更新⼀个或有限⼏个节点。
在选定的⼯作节点上升级kubeadm程序包。
root@k8s-node01:~# apt-get update && apt-get install -y --allow-change-held-packages
kubeadm=1.18.2-00
在管理节点上执⾏如下命令排空选定的⼯作节点,以k8s-node01.ilinux.io为例。
ik8s@k8s-master01:~$ kubectl drain k8s-node01.ilinux.io --ignore-daemonsets
在⼯作节点上运⾏如下命令进⾏升级:
~# kubeadm upgrade node [upgrade] Reading configuration from the cluster... [upgrade] FYI: You can look at this config file with "kubectl -n kube-system get cm kubeadm-config -oyaml" [upgrade]Skipping phase. Not a control plane node. [kubelet-start] Downloading configuration for thekubelet from the "kubelet-config-1.18" ConfigMap in the kube-system namespace [kubelet-start]Writing kubelet configuration to file "/var/lib/kubelet/config.yaml" [upgrade] The configurationfor this node was successfully updated! [upgrade] Now you should go ahead and upgrade thekubelet package using your package manager.
更新kubelet和kubectl,并重启kubelet服务。
root@k8s-node01:~# apt-get update && apt-get install -y --allow-change-held-packages
kubelet=1.18.2-00 kubectl=1.18.2-00
root@k8s-node01:~# systemctl restart kubelet
在管理节点上执⾏如下命令,关闭该节点不可被调度的标识。
ik8s@k8s-master01:~$ kubectl uncordon k8s-node01.ilinux.io node/k8s-node01.ilinux.io
uncordoned
验证更新结果:
~$ kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-master01.ilinux.io Ready master3h1m v1.18.2 k8s-master02.ilinux.io Ready master 72m v1.18.2 k8s-master03.ilinux.io Readymaster 69m v1.18.2 k8s-node01.ilinux.io Ready 167m v1.18.2 k8s-node02.ilinux.io Ready 166mv1.18.1 k8s-node03.ilinux.io Ready 166m v1.18.1
其它节点的更新⽅式相同。
重置集群
若要重置某个节点,⾸先在管理节点上使⽤如下命令排空该节点。
ik8s@k8s-master01:~$ kubectl drain k8s-node01.ilinux.io --ignore-daemonsets
⽽后于该节点上运⾏如下命令完成重置操作。
~# kubeadm reset
基本应⽤ 命令式命令
创建部署
~$ kubectl create deployment demoapp --image=ikubernetes/demoapp:v1.0
创建服务:
~$ kubectl create service clusterip demoapp --tcp=80
于某个Pod中发起访问测试:
将应⽤的副本扩展⾄多个,验证测试过程。
~$ kubectl scale deployment/demoapp --replicas=3
升级并暂停(⾦丝雀发布),通过循环请求进⾏验证:
~$ kubectl set image deployments/demoapp demoapp=ikubernetes/demoapp:v1.1 && kubectl
rollout pause deployments/demoapp
查看暂停状态的更新。
~$ kubectl rollout status deployments/demoapp Waiting for deployment "demoapp" rollout to
finish: 1 out of 3 new replicas have been updated...
继续完成处于暂停状态的更新操作。
~$ kubectl rollout resume deployments/demoapp deployment.apps/demoapp resumed
删除Service
~$ kubectl delete services/demoapp
删除deployment
~$ kubectl delete deployments/demoapp
~# ethtool --offload flannel.1 rx off tx off
搜索量超70苹果手机在西班牙二手市场大受欢迎据西班牙经济学家报网站近日报道,针对西班牙二手智能手机市场的分析指出,苹果手机(尤其是苹果11)是2021年最受欢迎的机型,搜索量约为73。近年来,随着主要手机品牌不断增加新设备发
英特尔苹果联想台积电都站队乌克兰?都是被美国逼的自上周开始的俄乌冲突是愈演愈烈,而在战场之外,科技战金融战也是直接打响了。目前以美国为首的众多国家和公司,也对俄罗斯进行了一系列科技方面的制裁,比如台积电联想英特尔苹果特斯拉等等都
低性价比画质差!2022年了谁还头铁买激光电视?激光电视指的是那些以激光作为光源,搭配上专用的投影幕,利用超短焦投影技术成像实现大屏幕观影体验的电视,其原理都是光线穿过镜头后,将画面投射到幕布上。也就是说用户最终看到的是一个经过
奥密克戎变种可能被低估了,研究发现BA。2传播更快,症状也更严重相对乌克兰局势来说,当前有一个也很重要但讨论较少的事情,那就是目前出现了一个比奥密克戎传染性更强也更危险的新变种,这种病毒当前被命名为奥密克戎BA。2亚型变异株。根据日本东京大学的
文字转语音工具怎么选?如何操作?文字转语音工具,只需微信小程序配音鹅就可以。主播选择多样,背景音乐丰富,还可再调节语序快慢和添加停顿时长等功能。具体操作步骤如下首先,将文字直接粘贴到此文本框中,字数现在最高可达到
有什么好的APP值的推荐和使用?1。新闻软件今日头条。精细化推送内容,可以利用碎片化,着手接受内容。2。短视频软件抖音。同为头条的产品,一款专注为年轻人的音乐短视频软件,谁用谁知道。3。聊天工具微信。毋庸置疑微信
助听器常见的验配公式是什么?你好,每个人对声音的需求不一样,不同的公式处理的声音方法也不一样,NALNL1公式是1999年由澳大利亚国家声学实验室针对非线性放大助听器而推出的验配公式,通过不同强度的言语,使佩
怎样来提升花呗额度更高?花呗第一付款位,能用支付宝就尽量使用支付宝,完善个人信息,保持良好信用,支付宝买点理财产品,基金什么的。反正就是各种来一套呲牙呲牙呲牙使用支付宝花呗来消费已经成为我们很常见的支付方
比特币机器是怎么运转的?比特币挖矿经济账5800台矿机一天电费6720元作为目前虚拟货币中的领头羊,比特币声名在外。而在比特币的产出环节,比特币矿场如何运转,盈利情况如何?外界尚难知晓更多。比特币矿机24
网店中一个显卡的售价接近2000元,可一台配备此显卡的主机才3000多元,这是为什么?谢邀。首先,要清楚,即使显卡同一型号,例如都是GTX1080,像华硕与小影霸的价格,就不是一个档位的,华硕下面GTX1080还有不同的型号细分,并且还有工包卡,网吧卡甚至是矿卡一类
我的QQ等级能不能借钱?qq可以借款,在qq里借钱一般通过qq里的微粒贷功能借钱,不过开通微粒贷都是采用邀请制,如果没有获得邀请是不能开通的,如果qq不能开通,可尝试用qq绑定银行卡进行一段时间的支付转账