分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

Kubernetes插件部署

发布时间:2023-09-06 01:28责任编辑:顾先生关键词:暂无标签

1. 部署 KubeDNS 插件

官方的配置文件中包含以下镜像:

kube-dns ----监听service、pod等资源,动态更新DNS记录

sidecar ----用于监控和健康检查

dnsmasq ----用于缓存,并可从dns服务器获取dns监控指标

地址:

https://github.com/kubernetes/dns


官方的yaml文件目录:kubernetes/cluster/addons/dns

https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/dns


系统预定义的 RoleBinding


预定义的 RoleBinding system:kube-dns 将 kube-system 命名空间的 kube-dns ServiceAccount 与 system:kube-dns Role 绑定, 该 Role 具有访问 kube-apiserver DNS 相关 API 的权限。

#kubectlgetclusterrolebindingssystem:kube-dns-oyamlapiVersion:rbac.authorization.k8s.io/v1kind:ClusterRoleBindingmetadata:annotations:rbac.authorization.kubernetes.io/autoupdate:"true"creationTimestamp:2017-10-31T10:30:29Zlabels:kubernetes.io/bootstrapping:rbac-defaultsname:system:kube-dnsresourceVersion:"77"selfLink:/apis/rbac.authorization.k8s.io/v1/clusterrolebindings/system%3Akube-dnsuid:8483eb4f-be26-11e7-853b-000c297aff5droleRef:apiGroup:rbac.authorization.k8s.iokind:ClusterRolename:system:kube-dnssubjects:-kind:ServiceAccountname:kube-dnsnamespace:kube-system


下载 Kube-DNS 相关 yaml 文件

#mkdirdns&&cddns#curl-Ohttps://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/dns/kube-dns.yaml.base


修改后缀

#cpkube-dns.yaml.basekube-dns.yaml


替换所有的 images

#sed-i's/gcr.io\/google_containers/192.168.100.100\/k8s/g'kubedns-dns.yaml#sed-i"s/__PILLAR__DNS__SERVER__/10.254.0.2/g"kube-dns.yaml#sed-i"s/__PILLAR__DNS__DOMAIN__/cluster.local/g"kube-dns.yaml#diffkube-dns.yamlkube-dns.yaml.base33c33<clusterIP:10.254.0.2--->clusterIP:__PILLAR__DNS__SERVER__97c97<image:192.168.100.100/k8s/k8s-dns-kube-dns-amd64:1.14.5--->image:gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.7127,128c127<---domain=cluster.local.<---kube-master-url=http://192.168.100.102:8080--->---domain=__PILLAR__DNS__DOMAIN__.149c148<image:192.168.100.100/k8s/k8s-dns-dnsmasq-nanny-amd64:1.14.5--->image:gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.7169c168<---server=/cluster.local/127.0.0.1#10053--->---server=/__PILLAR__DNS__DOMAIN__/127.0.0.1#10053188c187<image:192.168.100.100/k8s/k8s-dns-sidecar-amd64:1.14.5--->image:gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.7201,202c200,201<---probe=kubedns,127.0.0.1:10053,kubernetes.default.svc.cluster.local,5,A<---probe=dnsmasq,127.0.0.1:53,kubernetes.default.svc.cluster.local,5,A--->---probe=kubedns,127.0.0.1:10053,kubernetes.default.svc.__PILLAR__DNS__DOMAIN__,5,SRV>---probe=dnsmasq,127.0.0.1:53,kubernetes.default.svc.__PILLAR__DNS__DOMAIN__,5,SRV

说明:

这里的镜像我替换为自己部署的镜像仓库:如需部署私有镜像仓库,请参考Harbor镜像仓库部署。

也可以在这里下载镜像:

hub.c.163.com/zhijiansd/k8s-dns-kube-dns-amd64:1.14.7

hub.c.163.com/zhijiansd/k8s-dns-sidecar-amd64:1.14.7

hub.c.163.com/zhijiansd/k8s-dns-dnsmasq-nanny-amd64:1.14.7

在我部署 kube-dns 时使用的是1.14.5版本,这时将域名解析记录由 SRV记录 更改为 A记录(使用1.14.7版本不用更改)。


执行该文件

#kubectlcreate-fkube-dns.yamlservice"kube-dns"createdserviceaccount"kube-dns"createdconfigmap"kube-dns"createddeployment"kube-dns"created


查看 KubeDNS 服务

#kubectlgetpods-nkube-system###查看kube-system下的podNAMEREADYSTATUSRESTARTSAGEkube-dns-7c7674cf68-lcgvc3/3Running05m#kubectlgetall--namespace=kube-system#kubectlgetall-nkube-systemNAMEDESIREDCURRENTUP-TO-DATEAVAILABLEAGEdeploy/kube-dns11117mNAMEDESIREDCURRENTREADYAGErs/kube-dns-7c7674cf681117mNAMEDESIREDCURRENTUP-TO-DATEAVAILABLEAGEdeploy/kube-dns11117mNAMEDESIREDCURRENTREADYAGErs/kube-dns-7c7674cf681117mNAMEREADYSTATUSRESTARTSAGEpo/kube-dns-7c7674cf68-lcgvc3/3Running07mNAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGEsvc/kube-dnsClusterIP10.254.0.2<none>53/UDP,53/TCP7m#kubectlcluster-info###查看集群信息Kubernetesmasterisrunningathttps://192.168.100.102:6443KubeDNSisrunningathttps://192.168.100.102:6443/api/v1/namespaces/kube-system/services/kube-dns/proxy#kubectlgetservices--all-namespaces|grepdns###查看集群服务kube-systemkube-dnsClusterIP10.254.0.2<none>53/UDP,53/TCP8m#kubectlgetservices-nkube-system|grepdnskube-dnsClusterIP10.254.0.2<none>53/UDP,53/TCP9m


查看 KubeDNS 守护程序的日志(如果 kube-dns 有pod没有起来或者报错可以使用如下命令排错)

#kubectllogs--namespace=kube-system$(kubectlgetpods--namespace=kube-system-lk8s-app=kube-dns-oname)-ckubedns#kubectllogs--namespace=kube-system$(kubectlgetpods--namespace=kube-system-lk8s-app=kube-dns-oname)-cdnsmasq#kubectllogs--namespace=kube-system$(kubectlgetpods--namespace=kube-system-lk8s-app=kube-dns-oname)-csidecar


检查 kube-dns 功能

a.编写 yaml 文件

#vimmy-nginx.yamlapiVersion:extensions/v1beta1###API版本kind:Deployment###指定创建资源的角色/类型metadata:###资源的元数据/属性name:my-nginx###资源名字,同一个namespace中必须唯一spec:###详细定义该资源replicas:1###指定rc中pod的个数template:###指定rc中pod的模板,rc中的pod都按该模板创建metadata:###指定rc中pod的元数据labels:###设定资源的标签run:my-nginx###标签以key/value的结构存在spec:containers:###指定资源中的容器-name:my-nginx###容器名image:192.168.100.100/library/nginx:1.13.0###容器使用的镜像地址ports:###端口映射列表-containerPort:80###容器需要暴露的端口


b. 执行该文件并查看pod

#kubectlcreate-fmy-nginx.yamldeployment"my-nginx"created#kubectlgetpodNAMEREADYSTATUSRESTARTSAGEmy-nginx-7bd7b4dbf-kkbrb1/1Running021s


c. 生成服务

#kubectlexposedeploymentmy-nginx--type=NodePort--name=my-nginxservice"my-nginx"exposed#kubectldescribesvcmy-nginx|grepNodePort


d. 测试 kube-dns 服务

#kubectlexec-itmy-nginx-7bd7b4dbf-kkbrb--/bin/bashroot@my-nginx-7bd7b4dbf-kkbrb:/#cat/etc/resolv.confnameserver10.254.0.2searchdefault.svc.cluster.local.svc.cluster.local.cluster.local.localdomainoptionsndots:5root@my-nginx-7bd7b4dbf-kkbrb:/#ping-c1my-nginxPINGmy-nginx.default.svc.cluster.local(10.254.35.229):56databytes---my-nginx.default.svc.cluster.localpingstatistics---1packetstransmitted,0packetsreceived,100%packetlossroot@my-nginx-7bd7b4dbf-kkbrb:/#ping-c1kube-dns.kube-system.svc.cluster.localPINGkube-dns.kube-system.svc.cluster.local(10.254.0.2):56databytes---kube-dns.kube-system.svc.cluster.localpingstatistics---1packetstransmitted,0packetsreceived,100%packetlossroot@my-nginx-7bd7b4dbf-kkbrb:/#ping-c1kubernetesPINGkubernetes.default.svc.cluster.local(10.254.0.1):56databytes---kubernetes.default.svc.cluster.localpingstatistics---1packetstransmitted,0packetsreceived,100%packetloss


2. 部署 Heapster 组件


Heapster 是容器集群监控和性能分析工具,天然的支持 Kubernetes 和 CoreOS。

在每个kubernetes Node上都会运行 Kubernetes 的监控agent---cAdvisor,它会收集本机以及容器的监控数据(cpu,memory,filesystem,network,uptime)。


cAdvisor web界面访问地址: http://< Node-IP >:4194


Heapster 是一个收集者,将每个 Node 上的 cAdvisor 的数据进行汇总,然后导到第三方工具(如InfluxDB)。


heapter+influxdb+grafana。heapter用来采集信息,influxdb用来存储,而grafana用来展示信息。


官方配置文件中包含如下镜像:

heapster

heapster-grafana

heapster-influxdb


官方地址:

https://github.com/kubernetes/heapster/tree/master/deploy/kube-config/


下载 heapster

#wgethttps://codeload.github.com/kubernetes/heapster/tar.gz/v1.5.0-beta.0-Oheapster-1.5.0-beta.tar.gz#tar-zxvfheapster-1.5.0-beta.tar.gz#cdheapster-1.5.0-beta.0/deploy/kube-config#cprbac/heapster-rbac.yamlinfluxdb/#cdinfluxdb/#lsgrafana.yamlheapster-rbac.yamlheapster.yamlinfluxdb.yaml


更换镜像地址并执行文件

#sed-i's/gcr.io\/google_containers/192.168.100.100\/k8s/g'*.yaml#kubectlcreate-f.deployment"monitoring-grafana"createdservice"monitoring-grafana"createdclusterrolebinding"heapster"createdserviceaccount"heapster"createddeployment"heapster"createdservice"heapster"createddeployment"monitoring-influxdb"createdservice"monitoring-influxdb"created

安装heapster涉及的镜像下载地址:

hub.c.163.com/zhijiansd/heapster-amd64:v1.4.0

hub.c.163.com/zhijiansd/heapster-grafana-amd64:v4.4.3

hub.c.163.com/zhijiansd/heapster-influxdb-amd64:v1.3.3


检查执行结果

#kubectlgetdeployments-nkube-system|grep-E'heapster|monitoring'heapster11111mmonitoring-grafana11111mmonitoring-influxdb11111m


检查 Pods

#kubectlgetpods-nkube-system|grep-E'heapster|monitoring'###查看podsheapster-d7f5dc5bf-k2c5v1/1Running02mmonitoring-grafana-98d44cd67-nfmmt1/1Running02mmonitoring-influxdb-6b6d749d9c-6q99p1/1Running02m#kubectlgetsvc-nkube-system|grep-E'heapster|monitoring'###查看servicesheapsterClusterIP10.254.198.254<none>80/TCP2mmonitoring-grafanaClusterIP10.254.73.182<none>80/TCP2mmonitoring-influxdbClusterIP10.254.143.75<none>8086/TCP2m#kubectlcluster-info###查看集群信息Kubernetesmasterisrunningathttps://192.168.100.102:6443Heapsterisrunningathttps://192.168.100.102:6443/api/v1/namespaces/kube-system/services/heapster/proxyKubeDNSisrunningathttps://192.168.100.102:6443/api/v1/namespaces/kube-system/services/kube-dns/proxymonitoring-grafanaisrunningathttps://192.168.100.102:6443/api/v1/namespaces/kube-system/services/monitoring-grafana/proxymonitoring-influxdbisrunningathttps://192.168.100.102:6443/api/v1/namespaces/kube-system/services/monitoring-influxdb/proxy

浏览器访问grafana:

https://master:6443/api/v1/namespaces/kube-system/services/monitoring-grafana/proxy

集群中node节点监控信息如下====>

pod相关监控信息如下===>


部署 Kubernetes Dashboard


官方文件地址:

https://github.com/kubernetes/dashboard/tree/master/src/deploy/


如下对访问控制的解释是我自行翻译的,看不懂的请访问下面的wiki页自行了解:


从 kubernetes-dashboard 1.7.0 开始只授予了最小的管理权限。

授权由Kubernetes API服务器处理。仪表板仅作为一个代理,并将所有的auth信息传递给它。如果禁止访问,相应的警告将显示在仪表板中。


WiKi: https://github.com/kubernetes/dashboard/wiki


默认的 Dashboard 权限:

1.在 kube-system 命名空间下 create 的权限,以创建 kubernet-dashboard-key-holder 权限


2.获取,更新和删除 kube-system 命名空间中名为 kubernetes-dashboard-key-holder 和 kubernetes-dashboard-certs 的权限


3.获取和更新 kube-system 命名空间中名为 kubernetes-dashboard-settings 的配置映射的权限


4.代理权限,以允许从 heapster 获取数据


认证授权


仪表板支持基于:

1.Authorization: Bearer <token>

2.Bearer Token

3.Username/password

4.Kubeconfig


登录


Login 视图已在1.7版本中引入,需要通过HTTPS启用和访问仪表板。通过HTTPS启用 --tls-cert-file 和 --tls-cert-key 选项到仪表板。HTTPS端口将在仪表板容器的8443端口上开放,可以通过 --port 来更改。


使用 Skip 选项将使仪表板使用 Service Account 权限登录。


授权


a.使用Authorization header是使仪表板作为用户访问HTTP的唯一方法


要使Dashboard使用授权标题,只需将每个请求中的Authorization:Bearer <token>传递给Dashboard。这可以通过在仪表板前配置反向代理来实现。代理将负责身份提供者的身份验证,并将请求头中生成的令牌传递给仪表板。请注意,Kubernetes API服务器需要正确配置才能接受这些令牌。


注:如果通过API服务器代理访问仪表板,授权标头将不起作用。访问仪表板指南中描述的kubectl代理和API服务器访问仪表板的方式将不起作用。这是因为,一旦请求到达API服务器,所有额外的头文件被丢弃。


查看 Token

#kubectl-nkube-systemgetsecretNAMETYPEDATAAGEdefault-token-qgzzxkubernetes.io/service-account-token36hheapster-token-kh678kubernetes.io/service-account-token35hkube-dns-token-jkwbfkubernetes.io/service-account-token35hkubernetes-dashboard-certsOpaque26hkubernetes-dashboard-key-holderOpaque26hkubernetes-dashboard-token-x76k5kubernetes.io/service-account-token36h


b.Bearer Token

参考Kubernetes身份验证文档:

https://kubernetes.io/docs/admin/authentication/


c.Basic

默认情况下,Basic authentication是禁用的。原因是Kubernetes API服务器需要配置授权模式 ABAC 和 --basic-auth-file。如果没有这个API服务器自动退回到anonymous匿名用户,那么就没有办法检查提供的凭证是否有效。


为了在仪表板中启用基本的auth,必须配置--authentication-mode=basic命令。默认情况下,设置为--authentication-mode=token。


d.Kubeconfig

为方便起见,提供了这种登录方法。在kubeconfig文件中只支持由--authentication-mode命令指定的身份验证选项。如果配置为使用其他方式,则将在仪表板中显示错误。此时不支持外部身份验证程序或基于证书的身份验证。


5.Admin privileges

向仪表板的服务帐户授予管理员权限可能是一种安全风险。

您可以通过在ClusterRoleBinding下创建一个完整的管理特权来授予Dashboard的服务帐户。根据选择的安装方法复制YAML文件,并保存为例如dashboard-admin.yaml。使用kubectl create -f dashboard-admin.yaml部署它。之后,可以在登录页面上使用Skip选项来访问仪表板。

#vimdashboard-admin.yamlapiVersion:rbac.authorization.k8s.io/v1beta1kind:ClusterRoleBindingmetadata:name:kubernetes-dashboardlabels:k8s-app:kubernetes-dashboardroleRef:apiGroup:rbac.authorization.k8s.iokind:ClusterRolename:cluster-adminsubjects:-kind:ServiceAccountname:kubernetes-dashboardnamespace:kube-system


官方配置文件中包含如下镜像:

kubernetes-dashboard-init(注:该镜像只在1.7版本中出现)

kubernetes-dashboard


A.官方推荐版,更严格的权限控制

#curl-Ohttps://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml


B.延续之前版本的新版本

#curl-Ohttps://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/alternative/kubernetes-dashboard.yaml


替换 images 并执行文件

#sed-i's/gcr.io\/google_containers/192.168.100.100\/k8s/g'kubernetes-dashboard.yaml#kubectlcreate-fkubernetes-dashboard.yamlsecret"kubernetes-dashboard-certs"createdserviceaccount"kubernetes-dashboard"createdrole"kubernetes-dashboard-minimal"createdrolebinding"kubernetes-dashboard-minimal"createddeployment"kubernetes-dashboard"createdservice"kubernetes-dashboard"created

安装kubernetes-dashboard使用的镜像下载地址:

hub.c.163.com/zhijiansd/kubernetes-dashboard-amd64:v1.8.0


查看相关信息

#kubectlgetpods-nkube-system|grepdash###查看podkubernetes-dashboard-7cc94ffffd-n55lf1/1Running033s#kubectlgetpod-owide--all-namespaces###查看pod状况和其所分布节点NAMESPACENAMEREADYSTATUSRESTARTSAGEIPNODEdefaultmy-nginx-7bd7b4dbf-b6m6q1/1Running112h10.254.95.2node2kube-systemheapster-d7f5dc5bf-8v4521/1Running112h10.254.59.2node1kube-systemkube-dns-84cc5f56fb-m2h4d3/3Running312h10.254.80.2masterkube-systemkubernetes-dashboard-78b55c9d4d-bdbp61/1Running112h10.254.95.3node2kube-systemmonitoring-grafana-98d44cd67-vlc4s1/1Running112h10.254.80.3masterkube-systemmonitoring-influxdb-6b6d749d9c-lh9ln1/1Running112h10.254.59.3node1#kubectltopnode-nkube-system###显示CPU、内存、和存储使用状况(需安装heapster)NAMECPU(cores)CPU%MEMORY(bytes)MEMORY%master377m4%587Mi7%node1185m2%371Mi4%node2167m2%326Mi4%#kubectltoppod-nkube-systemNAMECPU(cores)MEMORY(bytes)monitoring-influxdb-6b6d749d9c-lh9ln3m45Miheapster-d7f5dc5bf-8v4525m34Mikube-dns-84cc5f56fb-m2h4d5m36Mikubernetes-dashboard-78b55c9d4d-bdbp62m22Mimoni

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved