自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)

一、k8s容器资源限制

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

        request(资源需求):即运行Pod的节点必须满足运行Pod的最基本需求才能运行Pod。

        limit(资源限额):即运行Pod期间,可能内存使用量会增加,那最多能使用多少内存,这就是资源限额。

资源类型:

        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为换算标准的。

二、kubernetes资源监控

Metrics-Server部署

https://github.com/kubernetes-sigs/metrics-serverhttps://github.com/kubernetes-sigs/metrics-server

Dashboard部署

GitHub - kubernetes/dashboard: General-purpose web UI for Kubernetes clustersGeneral-purpose web UI for Kubernetes clusters. Contribute to kubernetes/dashboard development by creating an account on GitHub.https://github.com/kubernetes/dashboard

三、HPA实例

Horizontal Pod Autoscaler 演练 | KubernetesHorizontal Pod Autoscaler 可以根据 CPU 利用率自动扩缩 ReplicationController、 Deployment、ReplicaSet 或 StatefulSet 中的 Pod 数量 (也可以基于其他应用程序提供的度量指标,目前这一功能处于 beta 版本)。本文将引领你了解如何为 php-apache 服务器配置和使用 Horizontal Pod Autoscaler。 与 Horizontal Pod Autoscaler 相关的更多信息请参阅 Horizontal Pod Autoscaler 用户指南。准备开始 本文示例需要一个运行中的 Kubernetes 集群以及 kubectl,版本为 1.2 或更高。 Metrics 服务器 需要被部署到集群中,以便通过 Metrics API 提供度量数据。 Horizontal Pod Autoscaler 根据此 API 来获取度量数据。 要了解如何部署 metrics-server,请参考 metrics-server 文档 。如果需要为 Horizontal Pod Autoscaler 指定多种资源度量指标,你的 Kubernetes 集群以及 kubectl 至少需要达到 1.6 版本。 此外,如果要使用自定义度量指标,你的 Kubernetes 集群还必须能够与提供这些自定义指标 的 API 服务器通信。 最后,如果要使用与 Kubernetes 对象无关的度量指标,则 Kubernetes 集群版本至少需要 达到 1.https://kubernetes.io/zh/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/

四、Helm

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

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

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

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

自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第1张图片

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

自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第2张图片

官方文档:

Helm | DocsHelm - The Kubernetes Package Manager.https://helm.sh/docs/intro/ 官方镜像仓库:

Artifact HubFind, install and publish Kubernetes packageshttps://artifacthub.io/

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

Helm安装:

        下载软件包:helm-v3.1.1-linux-amd64.tar.gz

                $ tar zxf helm-v3.1.1-linux-amd64.tar.gz

                $ cd linux-amd64/

                $ cp helm /usr/local/bin/

设置helm命令补齐:

        echo "source <(helm completion bash)" >> ~/.bashrc

搜索官方helm hub chart库:

         $ helm search hub wordpress Helm

添加第三方 Chart 库:

        $ helm repo add stable http://mirror.azure.cn/kubernetes/charts/      

        $ helm repo add aliyun  https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

        $ helm search repo redis

自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第3张图片

Helm 部署应用:

$ $ helm  search repo redis            //查询 NAME                                       CHART VERSION    APP VERSION                                     stable/redis                        10.5.6           5.0.7         stable/redis-ha                     4.4.0            5.0.6         ...

helm  search repo redis           #从repo源中查询redis镜像

支持多种安装方式:(helm默认读取~/.kube/config信息连接k8s集群)
$ helm install redis-ha stable/redis-ha        #从镜像源安装(自定义名称为redis-ha)

$ helm inntall 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    #从URL安装

$ helm pull stable/redis-ha        //拉取应用到本地

$ helm status redis-ha            //查看状态 
$ helm uninstall redis-ha            //卸载

以一个helm中的nginx镜像为例,其中的文件“value.yaml”用于管理整个镜像的参数值,其中为参数false的项目表示该设置不生效,参数为true的项目表示该设置生效

自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第4张图片

 更改默认仓库为本地镜像仓库(本地没有时才会去外部拉取)

自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第5张图片

拉取的镜像的格式

自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第6张图片

测试:做一个自动资源控制

先拉取镜像并上传到本地仓库

再更改从参数值

自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第7张图片

安装镜像,其中“webserver”表示自定义的项目名称,“.”表示当前路径

自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第8张图片

查看是否就绪

自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第9张图片

 查看资源控制器

自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第10张图片

查看helm当前安装的项目、卸载项目

构建一个helm chart

#创建helm chart
[root@server2 helm]# helm create mychart
Creating mychart

[root@server2 helm]# ls
helm-v3.8.0-linux-amd64.tar.gz  linux-amd64  mychart  nginx  nginx-9.9.3.tgz
#查看mychart的目录结构
[root@server2 helm]# tree mychart/
mychart/
├── charts
├── Chart.yaml
├── templates
│   ├── deployment.yaml
│   ├── _helpers.tpl
│   ├── hpa.yaml
│   ├── ingress.yaml
│   ├── NOTES.txt
│   ├── serviceaccount.yaml
│   ├── service.yaml
│   └── tests
│       └── test-connection.yaml
└── values.yaml

#复制证书
[root@server2 ~]# cp /etc/docker/certs.d/reg.westos.org/ca.crt /etc/pki/ca-trust/source/anchors/
#更新证书
[root@server2 ~]# update-ca-trust 
#添加chart镜像到本地仓库
[root@server2 ~]#  helm  repo  add local https://reg.westos.org/chartrepo/charts
"local" has been added to your repositories

设置helm访问harbor仓库时的用户名和密码:(文件中设置后,否则需要在上传时指定用户名和密码)

[root@server2 helm]# vim /root/.config/helm/repositories.yaml 

自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第11张图片

上传镜像:需要提前安装好插件“helm-push_0.10.2_linux_amd64.tar.gz”

#安装插件
[root@server2 ~]# mkdir /root/.local/share/helm/plugins/cm-push
[root@server2 ~]# tar zxf helm-push_0.10.2_linux_amd64.tar.gz -C /root/.local/share/helm/plugins/cm-push

#上传镜像
[root@server2 helm]# helm cm-push mychart-0.1.0.tgz local

注意:上传时的三个参数,<--insecure>表示跳过证书检测,<-p>表示密码,<-u>表示用户

自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第12张图片

#更新镜像库
[root@server2 helm]# helm repo update
#查询镜像
[root@server2 helm]# helm search repo mychart
NAME         	CHART VERSION	APP VERSION	DESCRIPTION                
local/mychart	0.1.0        	v1         	A Helm chart for Kubernetes
#部署镜像
[root@server2 helm]# helm install demo local/mychart 

自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第13张图片

Helm部署nfs-client-provisioner:

nfs-subdir-external-provisioner 4.0.16 · viceice/nfs-subdir-external-provisionernfs-subdir-external-provisioner is an automatic provisioner that used your *already configured* NFS server, automatically creating Persistent Volumes.https://artifacthub.io/packages/helm/nfs-subdir-external-provisioner/nfs-subdir-external-provisioner

helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/

helm search repo nfs-subdir-external-provisioner

helm pull nfs-subdir-external-provisioner/nfs-subdir-external-provisioner 

tar zxf nfs-subdir-external-provisioner-4.0.16.tgz 

自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第14张图片

解压后更改配置文件:

自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第15张图片

在当前目录下部署:

#从当前目录安装镜像并并指定ns
helm install nfs-subdir-external-provisioner . -n nfs-client-provisioner 

kubectl get pod -n nfs-client-provisioner 

自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第16张图片

测试:通过之前的实验文件,创建3个pvc,并查看效果

#文件中总共创建3个pvc,这里只表示出一个
[root@server2 nfs]# vim /root/volume/pvc/nfs/pvc.yml 
  1 kind: PersistentVolumeClaim
  2 apiVersion: v1
  3 metadata:
  4   name: pvc1
  5 spec:
  6   storageClassName: nfs-client
  7   accessModes:
  8     - ReadWriteMany
  9   resources:
 10     requests:
 11       storage: 1Gi
*********

自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第17张图片

在共享目录中查看到已经pvc已经创建3个新的目录。删除pvc后目录也回收。

#列出镜像的历史版本
helm search repo ingress-nginx -l

#拉取镜像,并指定版本俄日4.0.17
helm pull ingress-nginx/ingress-nginx --version 4.0.17 

helm的图形化管理:

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

自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第18张图片

 kubeapps 7.8.7 · bitnami/bitnamiKubeapps is a web-based UI for launching and managing applications on Kubernetes. It allows users to deploy trusted applications and operators to control users access to the cluster.https://artifacthub.io/packages/helm/bitnami/kubeapps

#添加镜像源
helm repo add bitnami https://charts.bitnami.com/bitnami
#默认拉取kubeapps的最新版
helm pull bitnami/kubeapps

#创建新的namespace
kubectl create namespace kubeapps

编辑< vim /root/helm/kubeapps/values.yaml >文件,并做如下修改

自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第19张图片

自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第20张图片

 自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第21张图片

同时从< vim /root/helm/kubeapps/values.yaml >文件中寻找指定的镜像,并上传到本地harbor仓库

 编辑< vim /root/helm/kubeapps/charts/postgresql/values.yaml >文件,并做如下修改

自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第22张图片

并其中用到的将镜像下载到本地 

自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第23张图片

 编辑文件,并做如下修改

 自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第24张图片

并其中用到的将镜像下载到本地  

自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第25张图片

 上传镜像到本地仓库


[root@server1 ~]# docker images | grep bitnami
#批量改名
[root@server1 ~]# docker images | grep bitnami| awk '{system("docker tag "$1":"$2" reg.westos.org/"$1":"$2"")}'

[root@server1 ~]# docker images  |grep ^reg.westos.org/bitnami
#批量上传
[root@server1 ~]# docker images  |grep ^reg.westos.org/bitnami | awk '{system("docker push "$1":"$2"")}'

自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第26张图片

上传完成后总共有8个镜像。 

自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第27张图片

安装部署kubeapps

[root@server2 kubeapps]# pwd
/root/helm/kubeapps

[root@server2 kubeapps]# helm install kubeapps . -n kubeapps 

自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第28张图片

安装完成后,kubeapps部署所需要的所有pod都已经启动

自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第29张图片
 授权并获得token 

#创建一个sa
[root@server2 kubeapps]# kubectl create serviceaccount kubeapps-operator -n kubeapps
serviceaccount/kubeapps-operator created
#对sa授权,以便管理helm
[root@server2 kubeapps]# kubectl create clusterrolebinding kubeapps-operator --clusterrole=cluster-admin --serviceaccount=kubeapps:kubeapps-operator
clusterrolebinding.rbac.authorization.k8s.io/kubeapps-operator created

#显示token
[root@server2 kubeapps]# kubectl -n kubeapps describe secrets kubeapps-operator-token-7mm2h

自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第30张图片

 在浏览器测试:输入token

自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第31张图片

可以通过界面的方式部署镜像

自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第32张图片

harbor仓库与kubeapps的整合、与pod部署

自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第33张图片

 自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第34张图片

自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第35张图片

 第八步跳过了证书校验 ,如果需要证书的话可以将文件的内容粘贴在下边

自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第36张图片

 但是这里出现一个问题,报错原因是找不到“reg.westos.org”的解析。这是因为在server2节点上虽然有解析,但是在对应的kubeapps容器中并没有解析!!!

< kubectl -n kube-system get cm>

[root@server2 ~]# kubectl -n kube-system get cm
NAME                                 DATA   AGE
calico-config                        4      7d
coredns                              1      15d


#向容器内添加解析
[root@server2 ~]# kubectl -n kube-system edit cm coredns 
     14         hosts {
     15            172.25.254.1 reg.westos.org
     16            fallthrough
     17         }

自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第37张图片

解析添加完成后,浏览器中即可进行下一步添加设置。

自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第38张图片

自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第39张图片 自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第40张图片

自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第41张图片

自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第42张图片

 自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第43张图片

pod的升级与更改:

自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第44张图片

自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第45张图片 测试:

自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第46张图片

 pod版本回滚:

自动化运维之k8s——kubernetes资源监控、容器资源限制、HPA、Helm(未完待续)_第47张图片

五、k8s高可用集群

六、查看集群节点状态

#查看集群节点cpu状态
[root@server2 metrice]# kubectl top node 
NAME      CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
server2   242m         12%    1370Mi          72%       
server3   168m         8%     887Mi           46%       
server4   151m         7%     748Mi           39%       

你可能感兴趣的:(kubernetes,运维,自动化)