背景概况
我们的产品应用在应用交付过程中,之前传统的模式下会经历 物理机 -> 虚拟机 -> 容器化 -> K8s应用化 -> helm产品化输出 ,从而构建产品的完整流程实现,helm 化产品应用改造其中主要改造内容包括 deployment 资源化; PV/PVC 存储化; svc/ingress 网络化; 自动脚本job化; 从而实现应用产品的独立输出和集成改造的目的,接下来本文将会从nginx的helm化改造来举例说明在helm应用改造过程中可能涉及到的问题,因为nginx作为一个简单的应用不会涉及 例如 存储/job 应用改造,但是已经可以涵盖绝大多数的应用改造输出能力了。
原始项目
# 项目工作展示目录
cd /home/work/nginx-demo/
Kubernetes 支持多个虚拟集群,它们底层依赖于同一个物理集群。 这些虚拟集群被称为名字空间。
nginx-namespace.yaml 文件内容:
apiVersion: v1
kind: Namespace
metadata:
name: ns-test
labels:
name: label-test
Deployment 提供了一种对 Pod 和 ReplicaSet 的管理方式
nginx-deployment.yaml 文件内容:
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: ns-test
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:alpine
ports:
- containerPort: 80
使用 Kubernetes,你无需修改应用程序即可使用不熟悉的服务发现机制。 Kubernetes 为 Pods 提供自己的 IP 地址,并为一组 Pod 提供相同的 DNS 名, 并且可以在它们之间进行负载均衡。
nginx-service.yaml 内容如下:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
namespace: ns-test
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
项目Helm化
[root@vm3290 helm]# tree nginx-demo/
nginx-demo/
├── Chart.yaml
├── README.md
├── templates
│ ├── nginx-deployment.yaml
│ ├── nginx-ingress.yaml
│ ├── nginx-service.yaml
│ ├── NOTES.txt
│ └── tests
│ └── test-connection.yaml
└── values.yaml
2 directories, 8 files
定义 values.yaml 内容如下:
replicas: 1
resources:
limits:
cpu: "1"
memory: 1Gi
requests:
cpu: 200m
memory: 200Mi
service:
name: nginx-svc
ingress:
name: nginx-ingress
host: traefik.dracula.io
# 请不要修改此配置
global:
namespace: nginx-ns
nginx:
name: nginx-ds
replicas: 1
image: nginx
tag: alpine
port: 80
部署流程
1. 安装
helm install -n <YOUR-NAMESPACE> nginx-demo nginx-demo
2. 更新
helm upgrade -n <YOUR-NAMESPACE> nginx-demo nginx-demo
3. 卸载
helm delete -n <YOUR-NAMESPACE> nginx-demo
资源查看
拓展阅读:
我们的应用产品的 helm 化改造以后将会更方便管理和应用组件更新,但是我们再改造时同时需要注意提取那些变参,有些参数不会经常的变更所以需要保持,针对计算资源/存储/网络/密码账号信息这四面的配置一般需要全局变量提取进行可变参数的配置实现,针对镜像或者程序中写死的路径信息一般不做变更,不然需要再次适配才可以进行发布,通过 helm 化产品应用,我们对于自己产品将会很方便的管理和升级更新。