51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

详解kubernetes的企业级监控(付文档)

1.kubernetets容器资源限制

Kubernetes采用request和limit两种限制类型来对资源进行分配

• request(需求资源):即运行Pod的节点必须满足运行Pod的最基本需求才能运行Pod
• limit(资源限额):即运行Pod期间,可能内存使用量会增加,可以在yaml文件中设定最多能使用多少内存配置资源限额

资源类型:

• CPU的单位是核心数,内存的单位是字节;
• 一个容器申请0.5个CPU,就相当于申请1个CPU的一半,你也可以加个后缀m表示千分之一的概念;比如说100m的CPU,100豪的CPU和0.1个CPU是一样的

内存单位:
• K、M、G、T、P、E #通常以1000为换算标准
• Ki、Mi、Gi、Ti、Pi、Ei #通常以1024为换算标准

1).内存限制

[root@node11 ~]# docker load -i stress.tar
[root@node11 harbor]# docker push reg.westos.org/library/stress:latest上传镜像到私有仓库

[root@node22 limit]# vim pod.yaml apiVersion: v1 kind: Pod metadata: name: memory-demo spec: containers:

  • name: memory-demo image: stress args:
    • --vm
    • "1"
    • --vm-bytes
    • 200M resources: requests: memory: 50Mi limits: memory: 100Mi [root@node22 limit]# kubectl apply -f pod.yaml pod/memory-demo created [root@node22 limit]# kubectl get pod 运行内存时出现问题 NAME READY STATUS RESTARTS AGE memory-demo 0/1 ContainerCreating 0 17s

超过限制的内存就无法运行

如果容器超过设定的内存限制,则会被终止;如果可重新启动,则与所有其他类型的运行时故障一样,kubelet将重新启动它;如果一个容器超过其内存请求,那么当节点内存不足时,它的Pod可能被逐出

[root@node22 limit]# vim pod.yaml 将最大限制增加到201M
apiVersion: v1
kind: Pod
metadata:
  name: memory-demo
spec:
  containers:
  - name: memory-demo
    image: stress
    args:
    - --vm
    - "1"
    - --vm-bytes
    - 200M
    resources:
      requests:
        memory: 50Mi
      limits:
        memory: 201Mi
[root@node22 limit]# kubectl apply -f pod.yaml
pod/memory-demo created
[root@node22 limit]# kubectl get pod
NAME          READY   STATUS    RESTARTS   AGE
memory-demo   1/1     Running   0          7s
[root@node22 limit]# kubectl delete -f pod.yaml
pod "memory-demo" deleted

2).cpu限制

[root@node22 limit]# vim pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: memory-demo
spec:
  containers:
  - name: memory-demo
    image: stress
    args:
    - -c
    - "2"
    resources:
      requests:
        cpu: 5
      limits:
        cpu: 10
[root@node22 limit]# kubectl apply -f pod.yaml
pod/memory-demo created
[root@node22 limit]# kubectl get pod  cpu
NAME          READY   STATUS    RESTARTS   AGE
memory-demo   0/1     Pending   0          6s
##调度失败是因为申请的CPU资源超出集群节点所能提供的资源;但CPU使用率过高,不会被杀死pod

[root@node22 limit]# vim pod.yaml 将cpu数量降低一点 apiVersion: v1 kind: Pod metadata: name: memory-demo spec: containers:

  • name: memory-demo image: stress args:
    • -c
    • "2" resources: requests: cpu: 1 limits: cpu: 2 [root@node22 limit]# kubectl apply -f pod.yaml pod/memory-demo created [root@node22 limit]# kubectl get pod NAME READY STATUS RESTARTS AGE memory-demo 1/1 Running 0 3s [root@node22 limit]# kubectl delete -f pod.yaml --force

3).为namespace设置资源限制

[root@node22 limit]# vim limit.yaml
apiVersion: v1
kind: LimitRange
metadata:
  name: limitrange-memory
spec:
  limits:
  - default:
      cpu: 0.5
      memory: 512Mi
    defaultRequest:
      cpu: 0.1
      memory: 256Mi
    max:
      cpu: 1
      memory: 1Gi
    min:
      cpu: 0.1
      memory: 100Mi
    type: Container
[root@node22 limit]# kubectl apply -f limit.yaml
limitrange/limitrange-memory created
[root@node22 limit]# kubectl get limitranges
NAME                CREATED AT
limitrange-memory   2022-09-03T15:55:19Z
[root@node22 limit]# kubectl describe limitranges
Name:       limitrange-memory
Namespace:  default
Type        Resource  Min    Max  Default Request  Default Limit  Max Limit/Request Ratio
----        --------  ---    ---  ---------------  -------------  -----------------------
Container   cpu       100m   1    100m             500m           -
Container   memory    100Mi  1Gi  256Mi            512Mi          -
[root@node22 limit]# kubectl run demo --image=nginx
pod/demo created
[root@node22 limit]# kubectl describe pod demo
Limits:
      cpu:     500m
      memory:  512Mi
    Requests:
      cpu:        100m
      memory:     256Mi
##LimitRange在namespace中施加的最小和最大内存限制只有在创建和更新Pod时才会被应用,改变LimitRange不会对之前创建的Pod造成影响

[root@node22 limit]# vim pod.yaml apiVersion: v1 kind: Pod metadata: name: memory-demo spec: containers:

  • name: memory-demo image: nginx resources: requests: cpu: 1 memory: 500Mi limits: cpu: 2 memory: 1Gi [root@node22 limit]# kubectl apply -f pod.yaml cpu指定时最大一个 Error from server (Forbidden): error when creating "pod.yaml": pods "memory-demo" is forbidden: maximum cpu usage per Container is 1, but limit is 2 [root@node22 limit]# kubectl describe limitranges Name: limitrange-memory Namespace: default Type Resource Min Max Default Request Default Limit Max Limit/Request Ratio

Container cpu 100m 1 100m 500m - Container memory 100Mi 1Gi 256Mi 512Mi - [root@node22 limit]# vim pod.yaml 把最大限制改为1 apiVersion: v1 kind: Pod metadata: name: memory-demo spec: containers:

  • name: memory-demo image: nginx resources: requests: cpu: 1 memory: 500Mi limits: cpu: 1 memory: 1Gi [root@node22 limit]# kubectl apply -f pod.yaml pod/memory-demo created

4).为namespace设置资源配额

[root@node22 limit]# vim limit.yaml
apiVersion: v1
kind: LimitRange
metadata:
  name: limitrange-memory
spec:
  limits:
  - default:
      cpu: 0.5
      memory: 512Mi
    defaultRequest:
      cpu: 0.1
      memory: 256Mi
    max:
      cpu: 1
      memory: 1Gi
    min:
      cpu: 0.1
      memory: 100Mi
    type: Container

apiVersion: v1 kind: ResourceQuota metadata: name: mem-cpu-demo spec: hard: requests.cpu: "1" requests.memory: 1Gi limits.cpu: "2" limits.memory: 2Gi [root@node22 limit]# kubectl apply -f limit.yaml limitrange/limitrange-memory configured resourcequota/mem-cpu-demo created [root@node22 limit]# kubectl get pod NAME READY STATUS RESTARTS AGE demo 1/1 Running 0 10m memory-demo 1/1 Running 0 4m43s [root@node22 limit]# kubectl describe resourcequotas Name: mem-cpu-demo Namespace: default Resource Used Hard


limits.cpu 1500m 2 limits.memory 1536Mi 2Gi requests.cpu 1100m 1 requests.memory 756Mi 1Gi [root@node22 limit]# kubectl delete limitranges limitrange-memory 删除限制 limitrange "limitrange-memory" deleted [root@node22 limit]# kubectl describe limitranges No resources found in default namespace. [root@node22 limit]# kubectl run demo3 --image=nginx 配置完后必须设置限制,否则无法创建 Error from server (Forbidden): pods "demo3" is forbidden: failed quota: mem-cpu-demo: must specify limits.cpu,limits.memory,requests.cpu,requests.memory 创建的ResourceQuota对象将在default名字空间中添加以下限制: • 每个容器必须设置内存请求(memory request),内存限额(memory limit),cpu请求(cpu request)和cpu限额(cpu limit)。 • 所有容器的内存请求总额不得超过1 GiB。 • 所有容器的内存限额总额不得超过2 GiB。 • 所有容器的CPU请求总额不得超过1 CPU。 • 所有容器的CPU限额总额不得超过2 CPU。

5).为 Namespace 配置Pod配额:

[root@node22 limit]# vim limit.yaml
apiVersion: v1
kind: LimitRange
metadata:
  name: limitrange-memory
spec:
  limits:
  - default:
      cpu: 0.5
      memory: 512Mi
    defaultRequest:
      cpu: 0.1
      memory: 256Mi
    max:
      cpu: 1
      memory: 1Gi
    min:
      cpu: 0.1
      memory: 100Mi
    type: Container

apiVersion: v1 kind: ResourceQuota metadata: name: mem-cpu-demo spec: hard: requests.cpu: "1" requests.memory: 1Gi limits.cpu: "2" limits.memory: 2Gi


apiVersion: v1 kind: ResourceQuota metadata: name: pod-demo spec: hard: pods: "2" [root@node22 limit]# kubectl apply -f limit.yaml limitrange/limitrange-memory configured resourcequota/mem-cpu-demo unchanged resourcequota/pod-demo created [root@node22 limit]# kubectl describe resourcequotas Name: mem-cpu-demo Namespace: default Resource Used Hard


limits.cpu 0 2 limits.memory 0 2Gi requests.cpu 0 1 requests.memory 0 1Gi

Name: pod-demo Namespace: default Resource Used Hard


pods 0 2 [root@node22 limit]# kubectl run demo1 --image=nginx pod/demo1 created [root@node22 limit]# kubectl run demo2 --image=nginx pod/demo2 created [root@node22 limit]# kubectl describe resourcequotas 最多建立两个pod Name: mem-cpu-demo Namespace: default Resource Used Hard


limits.cpu 1 2 limits.memory 1Gi 2Gi requests.cpu 200m 1 requests.memory 512Mi 1Gi

Name: pod-demo Namespace: default Resource Used Hard


pods 2 2 [root@node22 limit]# kubectl run demo3 --image=nginx Error from server (Forbidden): pods "demo3" is forbidden: exceeded quota: pod-demo, requested: pods=1, used: pods=2, limited: pods=2

[root@node22 limit]# kubectl delete -f limit.yaml limitrange "limitrange-memory" deleted resourcequota "mem-cpu-demo" deleted resourcequota "pod-demo" deleted [root@node22 limit]# kubectl delete pod --all pod "demo1" deleted pod "demo2" deleted

2.kubernetes资源监控

1).Metrics-Ser ver部署

Metrics-Server是集群核心监控数据的聚合器,用来替换之前的heapster。

容器相关的 Metrics 主要来自于 kubelet 内置的 cAdvisor 服务,有了Metrics[1]
Server之后,用户就可以通过标准的 Kubernetes API 来访问到这些监控数据。

• Metrics API 只可以查询当前的度量数据,并不保存历史数据。
• Metrics API URI 为 /apis/metrics.k8s.io/,在 k8s.io/metrics 维护。
• 必须部署 metrics-server 才能使用该 API,metrics-server 通过调用 Kubelet Summary

API 获取数据。

示例:

• http://127.0.0.1:8001/apis/metrics.k8s.io/v1beta1/nodes

• http://127.0.0.1:8001/apis/metrics.k8s.io/v1beta1/nodes/<node-name>

• http://127.0.0.1:8001/apis/metrics.k8s.io/v1beta1/namespace/<namespace[1]

name>/pods/<pod-name>

Metrics Server并不是kube-apiserver的一部分,而是通过Aggregator这种插件机制,在独立部署的情况下同kube-apiserver一起统一对外服务的

kube-aggregator其实就是一个根据URL选择具体的API后端的代理服务器

Metrics-server属于Core metrics(核心指标),提供API metrics.k8s.io,仅提供Node和Pod的CPU和内存使用情况,而其他Custom Metrics(自定义指标)由Prometheus等组件来完成

资源下载:GitHub - kubernetes-sigs/metrics-server: Scalable and efficient source of container resource metrics for Kubernetes built-in autoscaling pipelines.

Metrics-server部署:

[root@node22 ~]# mkdir metrics
[root@node22 ~]# cd metrics/
[root@node22 metrics]# wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
[root@node22 metrics]# vim components.yaml 修改镜像路径


[root@node22 metrics]# kubectl apply -f components.yaml

部署后查看Metrics-server的Pod日志:

1).错误1:dial tcp: lookup server2 on 10.96.0.10:53: no such host

这是因为没有内网的DNS服务器,所以metrics-server无法解析节点名字。可以直接修改

coredns的configmap,讲各个节点的主机名加入到hosts中,这样所有Pod都可以从

CoreDNS中解析各个节点的名字。

• kubectl edit configmap coredns -n kube-system

apiVersion: v1

data:

Corefile: |

...

ready

hosts {

172.25.0.11 server1

172.25.0.12 server2

172.25.0.13 server3

fallthrough

}

kubernetes cluster.local in-addr.arpa ip6.arpa {

2).报错2:x509: certificate signed by unknown authority

Metric Server 支持一个参数 --kubelet-insecure-tls,可以跳过这一检查,然而官

方也明确说了,这种方式不推荐生产使用。

[root@node22 metrics]# vim components.yaml

[root@node22 metrics]# kubectl apply -f components.yaml

[root@node22 metrics]# kubectl -n kube-system get pod

NAME READY STATUS RESTARTS AGE

calico-kube-controllers-6444b57c6d-h6gcd 1/1 Running 7 (9h ago) 7d

calico-node-jcwvw 1/1 Running 0 6h39m

calico-node-rl8mx 1/1 Running 7 (9h ago) 7d2h

calico-node-xxksv 1/1 Running 5 (9h ago) 7d2h

coredns-7b56f6bc55-2pwnh 1/1 Running 9 (9h ago) 10d

coredns-7b56f6bc55-g458w 1/1 Running 9 (9h ago) 10d

etcd-node22 1/1 Running 9 (9h ago) 10d

kube-apiserver-node22 1/1 Running 8 (9h ago) 9d

kube-controller-manager-node22 1/1 Running 26 (92m ago) 10d

kube-proxy-8qc8h 1/1 Running 7 (9h ago) 9d

kube-proxy-cscgp 1/1 Running 9 (9h ago) 9d

kube-proxy-cz4r9 1/1 Running 0 6h39m

kube-scheduler-node22 1/1 Running 25 (92m ago) 10d

metrics-server-58fc4b6dbd-7dgd4 1/1 Running 0 52s

[root@node22 metrics]# kubectl top pod

No resources found in default namespace.

[root@node22 metrics]# kubectl top node

NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%

node22 216m 10% 1211Mi 70%

node33 84m 4% 931Mi 54%

node44 96m 4% 836Mi 48%


启用TLS Bootstrap 证书签发

3).报错3: Error from server (ServiceUnavailable): the server is currently unable to

handle the request (get nodes.metrics.k8s.io)

• 如果metrics-server正常启动,没有错误,应该就是网络问题。修改metrics[1]

server的Pod 网络模式:

[root@node22 metrics]# kubectl apply -f components.yaml
[root@node22 metrics]# kubectl get pod -n kube-system -o wide
NAME                                       READY   STATUS    RESTARTS        AGE     IP              NODE     NOMINATED NODE   READINESS GATES
calico-kube-controllers-6444b57c6d-h6gcd   1/1     Running   7 (9h ago)      7d      10.244.35.149   node22   <none>           <none>
calico-node-jcwvw                          1/1     Running   0               6h49m   192.168.0.44    node44   <none>           <none>
calico-node-rl8mx                          1/1     Running   7 (9h ago)      7d2h    192.168.0.22    node22   <none>           <none>
calico-node-xxksv                          1/1     Running   5 (9h ago)      7d2h    192.168.0.33    node33   <none>           <none>
coredns-7b56f6bc55-2pwnh                   1/1     Running   9 (9h ago)      10d     10.244.35.150   node22   <none>           <none>
coredns-7b56f6bc55-g458w                   1/1     Running   9 (9h ago)      10d     10.244.35.148   node22   <none>           <none>
etcd-node22                                1/1     Running   9 (9h ago)      10d     192.168.0.22    node22   <none>           <none>
kube-apiserver-node22                      1/1     Running   8 (9h ago)      9d      192.168.0.22    node22   <none>           <none>
kube-controller-manager-node22             1/1     Running   26 (101m ago)   10d     192.168.0.22    node22   <none>           <none>
kube-proxy-8qc8h                           1/1     Running   7 (9h ago)      9d      192.168.0.33    node33   <none>           <none>
kube-proxy-cscgp                           1/1     Running   9 (9h ago)      9d      192.168.0.22    node22   <none>           <none>
kube-proxy-cz4r9                           1/1     Running   0               6h49m   192.168.0.44    node44   <none>           <none>
kube-scheduler-node22                      1/1     Running   25 (102m ago)   10d     192.168.0.22    node22   <none>           <none>
metrics-server-7c77876544-zbz96            1/1     Running   0               37s     192.168.0.44    node44   <none>           <none>

4).Dashboard

Dashboard可以给用户提供一个可视化的Web界面来查看当前集群的各种信息;用户可以用Kubernetes Dashboard部署容器化的应用、监控应用的状态、执行故障排查任务以及管理Kubernetes各种资源

网址:https://github.com/kubernetes/dashboard

下载部署文件:

[root@node22 ~]# mkdir dashboard

[root@node22 ~]# cd dashboard/

[root@node22 dashboard]# wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.0/aio/deploy/recommended.yaml

[root@node22 dashboard]# kubectl apply -f recommended.yaml

namespace/kubernetes-dashboard created

serviceaccount/kubernetes-dashboard created

service/kubernetes-dashboard created

secret/kubernetes-dashboard-certs created

secret/kubernetes-dashboard-csrf created

secret/kubernetes-dashboard-key-holder created

configmap/kubernetes-dashboard-settings created

role.rbac.authorization.k8s.io/kubernetes-dashboard created

clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created

rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created

clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created

deployment.apps/kubernetes-dashboard created

service/dashboard-metrics-scraper created

deployment.apps/dashboard-metrics-scraper created

[root@node22 dashboard]# kubectl get ns

NAME STATUS AGE

default Active 11d

ingress-nginx Active 8d

kube-node-lease Active 11d

kube-public Active 11d

kube-system Active 11d

kubernetes-dashboard Active 20s

metallb-system Active 10d

nfs-client-provisioner Active 7d12h

test Active 8d

[root@node22 dashboard]# kubectl -n kubernetes-dashboard edit svc kubernetes-dashboard

service/kubernetes-dashboard edited


[root@node22 dashboard]# kubectl -n kubernetes-dashboard get svc

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE

dashboard-metrics-scraper ClusterIP 10.100.32.222 &lt;none&gt; 8000/TCP 3m37s

kubernetes-dashboard LoadBalancer 10.106.229.89 192.168.0.112 443:33958/TCP 3m38s

[root@node22 dashboard]# kubectl -n kubernetes-dashboard get secrets

NAME TYPE DATA AGE

default-token-j88k4 kubernetes.io/service-account-token 3 8m3s

kubernetes-dashboard-certs Opaque 0 8m3s

kubernetes-dashboard-csrf Opaque 1 8m3s

kubernetes-dashboard-key-holder Opaque 2 8m3s

kubernetes-dashboard-token-q72h6 kubernetes.io/service-account-token 3 8m3s

[root@node22 dashboard]# kubectl -n kubernetes-dashboard describe secrets kubernetes-dashboard-token-q72h6


查看登陆token

默认kubernetes-dashboard这个serviceaccount对集群没有操作权限,通过rbac进行角色绑定授权

[root@node22 dashboard]# vim rbac.yaml

apiVersion: rbac.authorization.k8s.io/v1

kind: ClusterRoleBinding

metadata:

name: kubernetes-dashboard-admin

roleRef:

apiGroup: rbac.authorization.k8s.io

kind: ClusterRole

name: cluster-admin

subjects:

  • kind: ServiceAccount

    name: kubernetes-dashboard

    namespace: kubernetes-dashboard

[root@node22 dashboard]# kubectl apply -f rbac.yaml

clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard-admin created

在浏览器刷新页面后即可查看到数据

3.Helm

Helm是Kubernetes应用的包管理工具,主要用来管理Charts,类似Linux系统的yum

Helm Chart是用来封装Kubernetes原生应用程序的一系列YAML文件,可以在你部署应用的时候自定义应用程序的一些Metadata,以便于应用程序的分发

对于应用发布者而言,可以通过Helm打包应用、管理应用依赖关系、管理应用版本并发布应用到软件仓库

对于使用者而言,使用Helm后不用需要编写复杂的应用部署文件,可以以简单的方式在Kubernetes上查找、安装、升级、回滚、卸载应用程序

Helm V3 与 V2 最大的区别在于去掉了tiller:

1).Helm当前最新版本 v3.1.0 官网:https://helm.sh/docs/intro/

Helm安装:

[root@node22 ~]# mkdir helm
[root@node22 ~]# cd helm/
[root@node22 helm]# cp /root/helm-v3.9.0-linux-amd64.tar.gz .
[root@node22 helm]# tar zxf helm-v3.9.0-linux-amd64.tar.gz
[root@node22 helm]# ls
helm-v3.9.0-linux-amd64.tar.gz  linux-amd64
[root@node22 helm]# cd linux-amd64/
[root@node22 linux-amd64]# mv helm /usr/local/bin

2).设置helm命令补齐:

[root@node22 ~]# echo "source <(helm completion bash)" >> ~/.bashrc
[root@node22 ~]# source .bashrccd

3).搜索官方helm hub chart库:

[root@node22 ~]# helm search hub nginx
URL                                                     CHART VERSION   APP VERSION                     DESCRIPTION
https://artifacthub.io/packages/helm/mirantis/n...      0.1.0           1.16.0                          A NGINX Docker Community based Helm chart for K...
https://artifacthub.io/packages/helm/bitnami/nginx      13.2.3          1.23.1                          NGINX Open Source is a web server that can be a...
https://artifacthub.io/packages/helm/bitnami-ak...      13.2.1          1.23.1                          NGINX Open Source is a web server that can be a...
https://artifacthub.io/packages/helm/test-nginx...      0.1.0           1.16.0                          A Helm chart for Kubernetes
https://artifacthub.io/packages/helm/wiremind/n...      2.1.1                                           An NGINX HTTP server
https://artifacthub.io/packages/helm/dysnix/nginx       7.1.8           1.19.4                          Chart for the nginx server
https://artifacthub.io/packages/helm/zrepo-test...      5.1.5           1.16.1                          Chart for the nginx server
https://artifacthub.io/packages/helm/cloudnativ...      3.2.0           1.16.0                          Chart for the nginx server

4).Helm 添加第三方 Chart 库:

[root@node22 ~]# helm repo add bitnami https://charts.bitnami.com/bitnami 创建仓库
"bitnami" has been added to your repositories
[root@node22 ~]# helm search repo nginx  查询
NAME                                    CHART VERSION   APP VERSION     DESCRIPTION
bitnami/nginx                           13.2.3          1.23.1          NGINX Open Source is a web server that can be a...
bitnami/nginx-ingress-controller        9.3.6           1.3.1           NGINX Ingress Controller is an Ingress controll...
bitnami/nginx-intel                     2.1.1           0.4.7           NGINX Open Source for Intel is a lightweight se...
bitnami/kong                            5.0.2           2.7.0           Kong is a scalable, open source API layer (aka ...

支持多种安装方式:(helm默认读取~/.kube/config信息连接k8s集群) •helm install redis-ha stable/redis-ha •helm install redis-ha redis-ha-4.4.0.tgz •helm install redis-ha path/redis-ha •helm install redis-ha https://example.com/charts/redis-ha-4.4.0.tgz •helm pull stable/redis-ha //拉取应用到本地 •helm status redis-ha //查看状态 •helm uninstall redis-ha //卸载

5).构建一个 Helm Chart:

[root@node22 helm]# helm create mychart  创建mychart
Creating mychart
[root@node22 helm]# ls  出现一个mychart目录
helm-v3.9.0-linux-amd64.tar.gz  linux-amd64  metrics-server  metrics-server-3.8.2.tgz  mychart  nfs-client-provisioner  nfs-client-provisioner-4.0.11.tgz
[root@node22 helm]# cd mychart/
[root@node22 mychart]# ls  自动生成相应目录
charts  Chart.yaml  templates  values.yaml
[root@node22 mychart]# yum install -y tree 下载tree命令
[root@node22 mychart]# tree .  查看目录结构
.
├── charts
├── Chart.yaml
├── templates
│   ├── deployment.yaml
│   ├── _helpers.tpl
│   ├── hpa.yaml
│   ├── ingress.yaml
│   ├── NOTES.txt
│   ├── serviceaccount.yaml
│   ├── service.yaml
│   └── tests
│       └── test-connection.yaml
└── values.yaml

3 directories, 10 files

编写mychart的应用描述信息:

[root@node22 mychart]# vim Chart.yaml

编写应用部署信息:

[root@node22 ~]# cd ingress/

[root@node22 ingress]# ls

auth deployment-2.yaml deployment.yaml deploy.yaml ingress.yaml tls.crt tls.key

[root@node22 ingress]# kubectl delete -f . 删除之前部署的ingress-ngibx

[root@node22 ingress]# cd

[root@node22 ~]# cd helm/

[root@node22 helm]# helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx

"ingress-nginx" has been added to your repositories 创建仓库

[root@node22 helm]# helm pull ingress-nginx/ingress-nginx 拉取镜像

[root@node22 helm]# tar zxf ingress-nginx-4.2.3.tgz

[root@node22 helm]# cd ingress-nginx/

[root@node22 ingress-nginx]# vim values.yaml



[root@node22 ingress-nginx]# kubectl create ns ingress-nginx

{#block-10738d9a-f488-45e4-8b43-e3934ed5bb52}

5).Helm部署nfs-client-provisioner:

删除之前的布置:

[root@node22 ~]# cd nfs

[root@node22 nfs]# kubectl delete -f . 不知道应用了哪个yaml文件就全部删掉

[root@node22 ~]# kubectl get pod -A 已经被回收

NAMESPACE NAME READY STATUS RESTARTS AGE

ingress-nginx ingress-nginx-controller-5bbfbbb9c7-vxdtr 1/1 Running 0 8d

kube-flannel kube-flannel-ds-2wf6n 1/1 Running 0 155m

kube-flannel kube-flannel-ds-h7fvp 1/1 Running 0 155m

kube-flannel kube-flannel-ds-rvhfp 1/1 Running 0 155m

kube-system coredns-7b56f6bc55-2pwnh 1/1 Running 3 (7d23h ago) 11d

kube-system coredns-7b56f6bc55-g458w 1/1 Running 3 (7d23h ago) 11d

kube-system etcd-node22 1/1 Running 3 (7d23h ago) 11d

kube-system kube-apiserver-node22 1/1 Running 2 (7d23h ago) 10d

kube-system kube-controller-manager-node22 1/1 Running 17 (7d ago) 11d

kube-system kube-proxy-8qc8h 1/1 Running 8 (<invalid> ago) 10d

kube-system kube-proxy-cscgp 1/1 Running 2 (7d23h ago) 10d

kube-system kube-proxy-zh89l 1/1 Running 0 10d

kube-system kube-scheduler-node22 1/1 Running 16 (7d ago) 11d

kubernetes-dashboard dashboard-metrics-scraper-799d786dbf-sdll7 1/1 Running 0 174m

kubernetes-dashboard kubernetes-dashboard-546cbc58cd-sct28 1/1 Running 0 174m

metallb-system controller-5c97f5f498-fvg5p 1/1 Running 1 (<invalid> ago) 8d

metallb-system speaker-2mlfr 1/1 Running 32 (<invalid> ago) 10d

metallb-system speaker-jkh2b 1/1 Running 12 (7d ago) 10d

metallb-system speaker-s66q5 1/1 Running 2 (<invalid> ago) 10d

• 预先配置好外部的NFS服务器

[root@node22 ~]# helm repo add kubesphere https://charts.kubesphere.io/main

"kubesphere" has been added to your repositories 创建仓库

[root@node22 ~]# helm repo list查看所有仓库

NAME URL

bitnami https://charts.bitnami.com/bitnami

kubesphere https://charts.kubesphere.io/main

[root@node22 ~]# helm search repo nfs-client 查询nfs-client-provisioner

NAME CHART VERSION APP VERSION DESCRIPTION

kubesphere/nfs-client-provisioner 4.0.11 4.0.2 nfs-client is an automatic provisioner that use...

[root@node22 helm]# helm pull kubesphere/nfs-client-provisioner 拉取包(默认最新)

[root@node22 helm]# tar zxf nfs-client-provisioner-4.0.11.tgz 解压

[root@node22 helm]# cd nfs-client-provisioner/

[root@node22 nfs-client-provisioner]# vim values.yaml 修改部署文件


[root@node22 nfs-client-provisioner]# helm -n nfs-client-provisioner install nfs-client-provisioner .    安装nfs-client-provisioner,通过当前目录下的yaml文件

NAME: nfs-client-provisioner

LAST DEPLOYED: Mon Sep 5 16:23:52 2022

NAMESPACE: nfs-client-provisioner

STATUS: deployed

REVISION: 1

TEST SUITE: None

[root@node22 nfs-client-provisioner]# helm list -A 查看

NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION

nfs-client-provisioner nfs-client-provisioner 1 2022-09-05 16:23:52.924963975 +0800 CST deployed nfs-client-provisioner-4.0.11 4.0.2

[root@node22 nfs-client-provisioner]# kubectl get sc

NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE

nfs-client (default) cluster.local/nfs-client-provisioner1 Delete Immediate false 2m41s

[root@node22 ~]# cd nfs/

[root@node22 nfs]# kubectl apply -f pvc.yaml

persistentvolumeclaim/test-claim created

[root@node11 harbor]# cd /nfsdata 回收时被删掉

[root@node11 nfsdata]# ls

default-data-mysql-0-pvc-1b48f075-3d3d-4ee9-a1ca-97b5b2792208 index.html pv1 pv2 pv3


6).Helm部署metrics-server应用:

[root@node22 metrics]# kubectl delete -f components.yaml
[root@node22 helm]# helm repo add metrics-server https://kubernetes-sigs.github.io/metrics-server/创建仓库
"metrics-server" has been added to your repositories
[root@node22 helm]# helm pull metrics-server/metrics-server  拉取源
[root@node22 helm]# tar zxf metrics-server-3.8.2.tgz
[root@node22 helm]# cd metrics-server/
[root@node22 metrics-server]# vim values.yaml

[root@node22 metrics-server]# helm -n kube-system install metrics-server . 下载成功 NAME: metrics-server LAST DEPLOYED: Mon Sep 5 16:51:33 2022 NAMESPACE: kube-system STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: ***********************************************************************

  • Metrics Server * *********************************************************************** Chart version: 3.8.2 App version: 0.6.1 Image tag: metrics-server/metrics-server:v0.6.1 *********************************************************************** [root@node22 ingress]# cd [root@node22 ~]# cd helm/ [root@node22 helm]# cd mychart/ [root@node22 mychart]# vim values.yaml [root@node22 ~]# cd helm/

7).将应用打包

[root@node22 helm]# helm package mychart  将应用打包

Successfully packaged chart and saved it to: /root/helm/mychart-0.1.0.tgz

8).建立本地charts仓库

9).添加本地私有仓库

[root@node22 helm]# cd /etc/docker/certs.d/reg.westos.org/
[root@node22 reg.westos.org]# cp ca.crt /etc/pki/ca-trust/source/anchors/解决证书问题
[root@node22 ~]# update-ca-trust更新信任证书
[root@node22 ~]# helm repo add local http://reg.westos.org/chartrepo/charts
"local" has been added to your repositories添加本地私有仓库

10).安装helm-push插件

[root@node22 ~]# helm env  获取目录
HELM_BIN="helm"
HELM_CACHE_HOME="/root/.cache/helm"
HELM_CONFIG_HOME="/root/.config/helm"
HELM_DATA_HOME="/root/.local/share/helm"
HELM_DEBUG="false"
HELM_KUBEAPISERVER=""
HELM_KUBEASGROUPS=""
HELM_KUBEASUSER=""
HELM_KUBECAFILE=""
HELM_KUBECONTEXT=""
HELM_KUBETOKEN=""
HELM_MAX_HISTORY="10"
HELM_NAMESPACE="default"
HELM_PLUGINS="/root/.local/share/helm/plugins"
HELM_REGISTRY_CONFIG="/root/.config/helm/registry/config.json"
HELM_REPOSITORY_CACHE="/root/.cache/helm/repository"
HELM_REPOSITORY_CONFIG="/root/.config/helm/repositories.yaml"
[root@node22 ~]# mkdir -p /root/.local/share/helm/plugins  创建目录
[root@node22 ~]# cd /root/.local/share/helm/plugins
[root@node22 plugins]# mkdir helm-push
[root@node22 helm]# tar zxf helm-push_0.10.2_linux_amd64.tar.gz -C ~/.local/share/helm/plugins/helm-push
[root@node22 helm-push]# helm plugin list
NAME    VERSION DESCRIPTION
cm-push 0.10.1  Push chart package to ChartMuseum

11).上传

[root@node22 helm]# helm cm-push mychart-0.1.0.tgz local 上传mychart到私有仓库

存在认证问题

[root@node22 helm]# helm cm-push mychart-0.1.0.tgz local -u admin -p westos

Pushing mychart-0.1.0.tgz to local... 解决问题

Done.


[root@node22 helm]# helm search repo mychart  无法search到

No results found

[root@node22 helm]# helm repo update local 更新local仓库

Hang tight while we grab the latest from your chart repositories...

...Successfully got an update from the "local" chart repository

Update Complete. ⎈Happy Helming!⎈

[root@node22 helm]# helm search repo mychart

NAME CHART VERSION APP VERSION DESCRIPTION

local/mychart 0.1.0 v1 A Helm chart for Kubernetes

[root@node22 helm]# helm search repo mychart

NAME CHART VERSION APP VERSION DESCRIPTION

local/mychart 0.1.0 v1 A Helm chart for Kubernetes

[root@node22 helm]# helm install myapp local/mychart 下载

NAME: myapp

LAST DEPLOYED: Tue Sep 6 04:30:07 2022

NAMESPACE: default

STATUS: deployed

REVISION: 1

NOTES:

  1. Get the application URL by running these commands:

http://myapp.westos.org/


12).升级和回滚:

[root@node22 helm]# cd mychart/
`[root@node22 mychart]# vim Chart.yaml
`

[root@node22 mychart]# vim values.yaml

[root@node22 mychart]# cd ..

[root@node22 helm]# helm package mychart

Successfully packaged chart and saved it to: /root/helm/mychart-0.2.0.tgz

[root@node22 helm]# helm cm-push mychart-0.2.0.tgz local -u admin -p westos

Pushing mychart-0.2.0.tgz to local...

Done.

[root@node22 helm]# helm repo update local 更新

Hang tight while we grab the latest from your chart repositories...

...Successfully got an update from the "local" chart repository

Update Complete. ⎈Happy Helming!⎈

[root@node22 helm]# helm search repo mychart 查看

NAME CHART VERSION APP VERSION DESCRIPTION

local/mychart 0.2.0 v2 A Helm chart for Kubernetes

[root@node22 helm]# helm upgrade myapp local/mychart 升级

Release "myapp" has been upgraded. Happy Helming!

NAME: myapp

LAST DEPLOYED: Tue Sep 6 04:36:45 2022

NAMESPACE: default

STATUS: deployed

REVISION: 2

NOTES:

  1. Get the application URL by running these commands:

http://myapp.westos.org/

回滚:

[root@node22 helm]# helm rollback myapp 1 回滚到1版本

Rollback was a success! Happy Helming!

[root@node22 helm]# helm history myapp 查看历史版本

REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION

1 Tue Sep 6 04:30:07 2022 superseded mychart-0.1.0 v1 Install complete

2 Tue Sep 6 04:36:45 2022 superseded mychart-0.2.0 v2 Upgrade complete

3 Tue Sep 6 04:39:03 2022 deployed mychart-0.1.0 v1 Rollback to 1

[root@node22 helm]# helm uninstall myapp 删除myapp

release &quot;myapp&quot; uninstalled


12).部署kubeapps应用,为Helm提供web UI界面管理:

[root@node22 helm]# helm pull bitnami/kubeapps --version 8.1.11

[root@node22 helm]# tar zxf kubeapps-8.1.11.tgz

[root@node22 helm]# cd kubeapps/

[root@node22 kubeapps]# vim values.yaml


[root@node22 charts]# ls

common postgresql redis

[root@node22 charts]# cd postgresql/

[root@node22 postgresql]# vim values.yaml


[root@node22 kubeapps]# kubectl create namespace  kubeapps  创建ns

namespace/kubeapps created

[root@node22 kubeapps]# helm -n kubeapps install kubeapps . 下载

[root@node22 kubeapps]# kubectl get pod -n kubeapps

NAME READY STATUS RESTARTS AGE

apprepo-kubeapps-sync-bitnami-8bp6s-rgp76 1/1 Running 0 4m46s

kubeapps-5c9f6f9f78-qwccl 1/1 Running 0 10m

kubeapps-5c9f6f9f78-xpchk 1/1 Running 0 10m

kubeapps-internal-apprepository-controller-578d9cbfb4-7fskh 1/1 Running 0 10m

kubeapps-internal-dashboard-76d4f8678b-r7st6 1/1 Running 0 10m

kubeapps-internal-dashboard-76d4f8678b-ttd5k 1/1 Running 0 10m

kubeapps-internal-kubeappsapis-5ff75b9686-2btdw 1/1 Running 0 10m

kubeapps-internal-kubeappsapis-5ff75b9686-st8mm 1/1 Running 0 10m

kubeapps-internal-kubeops-798b96fc-8w6zx 1/1 Running 0 10m

kubeapps-internal-kubeops-798b96fc-tbvsh 1/1 Running 0 10m

kubeapps-postgresql-0 1/1 Running 0 10m

[root@node22 kubeapps]# kubectl -n kubeapps edit svc kubeapps


[root@node22 kubeapps]# kubectl get svc -n kubeapps

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE

kubeapps LoadBalancer 10.99.251.221 192.168.0.112 80:59686/TCP 14m

kubeapps-internal-dashboard ClusterIP 10.105.13.222 &lt;none&gt; 8080/TCP 14m

kubeapps-internal-kubeappsapis ClusterIP 10.108.2.177 &lt;none&gt; 8080/TCP 14m

kubeapps-internal-kubeops ClusterIP 10.103.206.129 &lt;none&gt; 8080/TCP 14m

kubeapps-postgresql ClusterIP 10.108.191.73 &lt;none&gt; 5432/TCP 14m

kubeapps-postgresql-hl ClusterIP None &lt;none&gt; 5432/TCP 14m

访问kubeapps的dashboard: 使用192.168.0.112访问


[root@node22 kubeapps]# kubectl create serviceaccount kubeapps-operator -n kubeapps

serviceaccount/kubeapps-operator created

[root@node22 kubeapps]# kubectl create clusterrolebinding kubeapps-operator --clusterrole=cluster-admin -- serviceaccount=kubeapps:kubeapps-operator

clusterrolebinding.rbac.authorization.k8s.io/kubeapps-operator created

[root@node22 kubeapps]# kubectl -n kubeapps get sa

NAME SECRETS AGE

default 1 23m

kubeapps-internal-apprepository-controller 1 22m

kubeapps-internal-kubeappsapis 1 22m

kubeapps-internal-kubeops 1 22m

kubeapps-operator 1 27s

[root@node22 kubeapps]# kubectl -n kubeapps get secrets

NAME TYPE DATA AGE

default-token-8ln77 kubernetes.io/service-account-token 3 23m

kubeapps-internal-apprepository-controller-token-5mfd8 kubernetes.io/service-account-token 3 22m

kubeapps-internal-kubeappsapis-token-stbpw kubernetes.io/service-account-token 3 22m

kubeapps-internal-kubeops-token-hrn6b kubernetes.io/service-account-token 3 22m

kubeapps-operator-token-qx5jz kubernetes.io/service-account-token 3 35s

kubeapps-postgresql Opaque 1 22m

sh.helm.release.v1.kubeapps.v1 helm.sh/release.v1 1 22m


赞(2)
未经允许不得转载:工具盒子 » 详解kubernetes的企业级监控(付文档)