第七课:尚硅谷K8s学习- Prometheus、Grafana和EFK、证书年限
tags:
- golang
- 2019尚硅谷
categories:
- K8s
- Helm安装使用
- Prometheus
- Grafana
- HPA
- k8s资源限制
- 日志收集EFK
- 证书可用年限修改
文章目录
第一节 helm介绍
1.1 为什么需要helm
- 在没使用helm之前,向kubernetes部署应用,我们要依次部署deployment,service,configMap等,步骤较繁琐。况且随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂。
- helm通过打包的方式,支持发布的版本管理和控制,很大程度上简化了Kubernetes应用的部署和管理
- Helm本质就是让K8s的应用管理(Deployment,Service 等)可配置,能动态生成。通过动态生成K8s资源清单文件(deployment.yaml, service.yaml) 。然后调用Kubectl自动执行K8s资源部署
1.2 helm中几个概念
- Helm是官方提供的类似于YUM的包管理器,是部署环境的流程封装。Helm 有两个重要的概念: Chart 和Release
- Chart: 一个Helm包,其中包含了运行一个应用所需要的镜像、依赖和资源定义等,还可能包含Kubernetes集群中的服务定义(可以理解为docker的image)
- Release: 在Kubernetes集群上运行的 Chart的一个实例。在同一个集群上,一个 Chart可以安装很多次。每次安装都会创建一个新的release(可以理解为docker的container实例)
- Helm包含两个组件: Helm客户端和Tiller服务器,如下图所示
- Helm客户端负责chart和release的创建和管理以及和Tiller的交互。Tiller 服务器运行在Kubernetes集群中,它会处理Helm客户端的请求,与Kubernetes API Server交互
1.3 helm安装
- Helm 的安装十分简单。下载 helm命令行具到master节点.
- 安装github网站:https://github.com/helm/helm/releases/tag/v3.2.4
- 这里安装3.2.4版本,通过脚本的方式后查看版本。helm version
- 或者通过下载 Linux amd64 版本。
# 如无需更换版本,直接执行下载
wget https://get.helm.sh/helm-v3.2.4-linux-amd64.tar.gz
# 解压
tar -zxvf helm-v3.2.4-linux-amd64.tar.gz
# 进入到解压后的目录
cd linux-amd64/
cp helm /usr/local/bin/
# 赋予权限
chmod a+x /usr/local/bin/helm
# 查看版本
helm version
- Kubernetes 1.6 中开启了 RBAC ,权限控制变得简单了。Helm 也不必与 Kubernetes 做重复的事情,因此 Helm 3 彻底移除了 Tiller 。 移除 Tiller 之后,Helm 的安全模型也变得简单(使用 RBAC 来控制生产环境 Tiller 的权限非常不易于管理)。Helm 3 使用 kubeconfig 鉴权。集群管理员针对应用,可以设置任何所需级别的权限控制,而其他功能保持不变。
- 官网仓库: https://hub.helm.sh/ 这里是官方或别人的仓库。
第二节 自定义的chart
2.1 模板文件目录结构
- 上面仓库中的模板是别人做的。如何做自己的模板呢?
- 目录结构如下
.
├── Chart.yaml
├── templates
| ├── deployment.yaml
| └── service.yaml
├── values.yaml
- 一个基本的自定义chart的文件目录结构大概是如上:
- Chart.yaml: 定义当前chart的基本metadata, 比如name,tag啥的
- templates: 这个文件夹下放当前chart需要的一些yaml资源清单
- 资源清单支持变量模版语法
- values.yaml: 定义变量,可被template下的yaml资源清单使用
2.2 自定义chart的示例
# 1. 新建一个文件夹demo存放chart
mkdir demo && cd demo && mkdir templates
# 2. 新建Chart.yaml 必须包含name和version两个字段
cat << EOF > Chart.yaml
name: hello-world
version: 1.0.0
EOF
# 3. 新建./templates/deployment.yaml
# 模板目录必须是templates 注意image部分可以使用变量的模板语法,可以动态插入
cat << EOF > ./templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-world
spec:
replicas: 1
selector:
matchLabels:
app: hello-world
template:
metadata:
labels:
app: hello-world
spec:
containers:
- name: hello-world
image: hub.qnhyn.com/library/myapp:v1
ports:
- containerPort: 80
protocol: TCP
EOF
# 4. 新建./templates/service.yaml
cat << EOF > ./templates/service.yaml
apiVersion: v1
kind: Service
metadata:
name: hello-world
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
protocol: TCP
selector:
app: hello-world
EOF
# 5. 新建values.yaml 这个用来动态导入的image: {
{ .Values.image.repository }}:{
{ .Values.image.tag }}
# 这样做有个好处 只需要修改values.yaml文件 可以动态修改配置
#cat << EOF > values.yaml
#image:
# repository: lzw5399/tocgenerator
# tag: '951'
#EOF
# 将chart实例化成release
# 格式:helm install [RELEASE-NAME] [CHART-PATH]
helm install testname .
# 查看release
helm ls
# 查看历史
helm history <RELEASE_NAME>
# 安装成功!!
kubectl get pod
2.3 helm的基本操作
- 查看release
# 列出已经部署的Release
helm ls
# 查询一个特定的Release的状态
helm status <RELEASE_NAME>
# 查看被移除了,但保留了历史记录的release
helm ls --uninstalled
- 安装release