当前位置: 首页 > Linux

KubernetesV1.19.3kubeadm部署笔记(中)

时间:2023-04-06 04:11:05 Linux

本文根据博文:《002.使用kubeadm安装kubernetes 1.17.0》https://www.cnblogs.com/zyxnh...和《Kubernetes权威指南》等资料完成部署记录和总结。本文分为三个部分,(上)记录基础设施环境的前期准备和Master的部署,以及网络插件Flannel的部署。(中)记录了node的部署过程和一些必要容器的部署。(下)介绍一些监控和DevOps相关的内容。三。当然建议通过ansible等配置管理工具统一部署节点。我的文档仅以节点为例。1.加入集群:kubeadmjoin命令[root@k8s-masteropt]#kubeadmjoin192.168.56.99:6443--tokenabcdef.0123456789abcdef--discovery-token-ca-cert-hashsha256:ef543a59aac99e4f86e6661a7eb04d05b8a03269c7784378418ff3ff2a2d2d3c2.查看结果:成功了如果是这样,屏幕上的回声应该是这样的。如果失败,检查原因。此节点已加入集群:*已将证书签名请求发送到apiserver并收到响应。*Kubelet被告知新的安全连接细节。在控制平面上运行“kubectlgetnodes”以查看此节点是否加入集群。我在这里失败了。通过两个终端查看,终于发现还是老问题,拉图卡住了。本来以为在master上拉取镜像就可以了,但实际上每个节点的镜像应该是一样的。后来想通了,镜像是通过文件系统和对象存储来体现的。在一台机器上有这个文件对象并不意味着它也在另一台机器上。另外,K8S和Docker都没有镜像同步机制。[root@k8s-masteropt]#dockerpullkubeimage/kube-proxy-amd64:v1.19.3[root@k8s-masteropt]#dockerpullkubeimage/pause-amd64:3.2这说明还是上面说的容器比较好该映像应封装到操作系统映像中。私有云的Openstack或者VMVwarevSphere,公有云的阿里云等都支持自定义镜像,一下子就快多了。不仅镜像本地化,那些常用的配置也不需要重复配置,大大节省了生产力。3、部署Node时遇到的问题。(1)kubelet无法启动。通过查看系统服务状态,发现该服务一直处于Activating状态,并没有运行。查看消息发现kubelet.service在启动的时候会检查swap分区。如果分区存在,则无法启动。手动关闭。日志很清楚:Nov609:04:24k8s-node01kubelet:F110609:04:24.6807512635server.go:265]failedtorunKubelet:runningwithswaponisnotsupported,pleasedisableswap!或将--fail-swap-on标志设置为false。/proc/swaps包含:[Filename#011#011#011#011Type#011#011Size#011Used#011Priority/dev/dm-1partition#011839676#0110#011-2]4。部署节点完成[root@k8s-masteropt]#kubectlgetnodesNAMESTATUSROLESAGEVERSION192.168.56.99Readymaster4d22hv1.19.3k8s-node01NotReady4d22hv1.19.3四。部署必要的容器1.kubernetes-dashboard是整个集群的web管理界面,是以后管理集群所必需的。[root@k8s-masteropt]#wgethttps://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended.yaml我们先使用标准配置申请,有的话再修改问题。[root@k8s-masteropt]#kubectlapply-frecommand.ymlamespace/kubernetes-dashboardcreatedserviceaccount/kubernetes-dashboardcreatedservice/kubernetes-dashboardcreatedsecret/kubernetes-dashboard-certscreatedsecret/kubernetes-dashboard-csrfcreatedsecret/kubernetes-dashboard密钥-holdercreatedconfigmap/kubernetes-dashboard-settingscreatedrole.rbac.authorization.k8s.io/kubernetes-dashboardcreatedclusterrole.rbac.authorization.k8s.io/kubernetes-dashboardcreatedrolebinding.rbac.authorization.k8s.io/kubernetes-dashluboardcreatedrolebinding。rbac.authorization.k8s.io/kubernetes-dashboardcreateddeployment.apps/kubernetes-dashboardcreatedservice/dashboard-metrics-scrapercreateddeployment.apps/dashboard-metrics-scrapercreated如果有问题,屏幕会告诉你哪个资源没有beencreated如果成功,去修改处理。kubectlgetpods-nkubernetes-dashboardNAMEREADYSTATUSRESTARTSAGEdashboard-metrics-scraper-76585494d8-5jtvw1/1Running086skubernetes-dashboard-b7ffbc8cb-4xcdp1/1Running086s2。打包仪表板供我的电脑访问如何?这个dashboard只有一个虚拟ClusterIP(不能直接访问也不能PING),还有一个podIP,同样不能直接访问。最后的答案其实就是在dashboard.yml文件中添加一些配置,将Service的ClusterIP转换为虚拟机的NodeIP,通过NodeIP:NodePort访问Service。[root@k8s-masteropt]#vimrecommended.yamlkind:ServiceapiVersion:v1metadata:labels:k8s-app:kubernetes-dashboardname:kubernetes-dashboardnamespace:kubernetes-dashboardspec:type:NodePort#这里加一行,访问方式ForNodePortports:-port:443targetPort:8443nodePort:32443#在这里添加一行指定NodePortselector的具体值:k8s-app:kubernetes-dashboard砸掉原来的dashboard资源集,重新构建。[root@k8s-masteropt]#kubectldelete-frecommended.yamlnamespace“kubernetes-dashboard”deletedserviceaccount“kubernetes-dashboard”deletedservice“kubernetes-dashboard”deletedsecret“kubernetes-dashboard-certs”deletedsecret“kubernetes-dashboard-csrf”deletedsecret“kubernetes-dashboard-key-holder”deletedconfigmap“kubernetes-dashboard-settings”deletedrole.rbac.authorization.k8s.io“kubernetes-dashboard”deletedclusterrole.rbac.authorization.k8s.io“kubernetes-dashboard”deletrolebinding.rbac。authorization.k8s.io“kubernetes-dashboard”deletedclusterrolebinding.rbac.authorization.k8s.io“kubernetes-dashboard”deleteddeployment.apps“kubernetes-dashboard”deletedservice“dashboard-metrics-scraper”deleteddeployment.apps“dashboard-metrics-scraper”删除[root@k8s-masteropt]#kubectlapple-frecommended.yaml这样你就可以访问:https://192.168.56.99:324433。dashboard的token和权限在打开Verifyidentidy页面后会询问你是使用token还是kubeconfig。选择kubeconfig就相当于在本地拥有了一套kubeadmin-config配置文件,通过浏览器上传验证非常简单。获取token的方法如下,将打印结果粘贴到浏览器中:[root@k8s-masteropt]#kubectldescribesecret-nkubernetes-dashboard$(kubectlgetsecret-nkubernetes-dashboard|grepkubernetes-仪表板令牌|awk'{print$1}')|grep令牌|awk'{print$2}'登录发现很多东西看不到,那是因为dashboard默认权限低。[root@k8s-masteropt]#vimrecommended.yamlapiVersion:rbac.authorization.k8s.io/v1kind:ClusterRoleBindingmetadata:name:kubernetes-dashboardroleRef:apiGroup:rbac.authorization.k8s.iokind:ClusterRolename:cluster-admin#name:kubernetes-dashboardsubjects:-kind:ServiceAccountname:kubernetes-dashboardnamespace:kubernetes-dashboard崩溃,然后重新部署仪表板。当然登录的时候肯定是token变了。3.部署kubernetes-dashboard遇到的问题,还有一些值得一提的地方。(1)我在申请的时候发现kubernetes-dashboard容器一直在反复crash,处于CrashLoopBackOff状态。各种方式查看排查,比如kubectldescribepodkubernetes-dashboard-b7ffbc8cb-4xcdp-nkubernetes-dashboard查看容器的运行状态,比如去节点dockerlogs$CONTAINERID,比如去查看kubelet的报文,最后发现是网络通信问题,容器无法与Service的ClusterIP10.96.0.1的网络通信。11月3日23:48:54k8s-node01日志:恐慌:获取“https://10.96.0.1:443/api/v1/namespaces/kubernetes-dashboard/secrets/kubernetes-dashboard-csrf”:拨打tcp10.96.0.1:443:connect:noroutetohost看了一下路由确实有,但是报错也提示有相关问题。后来发现firewalld.service这个服务并没有关闭。关闭后,容器创建成功。(2)dashboard的作者构建了一个单一的namespace,区别于旧版本统一使用kube-system。(3)可以使用quay.io镜像,拉取速度很快。