引言
Helm是Kubernetes的包管理工具,它通过将Kubernetes部署所需的所有资源文件组织成“图表”(Charts)来简化部署过程。本文将引导您通过创建一个简单的Python Flask Web应用,并打包成Helm图表,以展示Helm在实际项目中的应用。
创建Python Flask项目
编写应用代码
首先,创建一个基本的Flask应用,用于展示“Hello World”消息。
[root@master ~]# cat main.py
from flask import Flask, jsonify, request
app = Flask(__name__)
@app.route('/hello', methods=['GET'])
def helloworld():
return jsonify({"data": "Hello World"})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=9001)
编写Dockerfile
为应用创建一个Dockerfile,定义构建镜像的步骤。
[root@master ~]# cat Dockerfile
FROM python:3.8
WORKDIR /app
COPY . /app
RUN pip install flask
CMD ["python3", "main.py"]
构建和验证Docker镜像
构建镜像并运行容器以验证其功能。
[root@master ~]# docker build -t python-rest-api .
[root@master ~]# docker run --rm -p 9001:9001 python-rest-api
准备Helm图表
创建Helm图表
使用Helm命令创建一个新的图表。
[root@master ~]# helm create python-flask
配置Chart.yaml
更新Chart.yaml
文件,注释掉默认的应用程序版本号。
[root@master python-flask]# vim Chart.yaml
# appVersion: "1.16.0" # 注释掉默认的应用程序的版本号
更新values.yaml
修改values.yaml
文件,指定自定义镜像和版本号。
[root@master python-flask]# vim values.yaml
...
image:
repository: fengji/python-flask
pullPolicy: IfNotPresent
tag: "1.0" # 指定版本号
...
service:
type: NodePort # 修改ClusterIP为NodePort
port: 80
...
``
### 调整Deployment模板
编辑`deployment.yaml`模板文件,确保容器使用正确的端口。
```yaml
[root@master python-flask]# vim templates/deployment.yaml (节选)
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- name: http
containerPort: 9001
protocol: TCP
为了加快验证,可以先将
就绪探针
和存活探针
注释掉。
部署应用程序
使用Helm命令安装应用程序。
[root@master ~]# helm install myflask python-flask
NAME: myflask
LAST DEPLOYED: Wed Apr 24 17:00:12 2024
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
1. Get the application URL by running these commands:
export NODE_PORT=$(kubectl get --namespace default -o jsonpath="{.spec.ports[0].nodePort}" services myflask-python-flask)
export NODE_IP=$(kubectl get nodes --namespace default -o jsonpath="{.items[0].status.addresses[0].address}")
echo http://$NODE_IP:$NODE_PORT
验证服务
检查服务是否正确部署,并使用curl命令验证服务响应。
[root@master ~]# kubectl get svc | grep python-flask
myflask-python-flask NodePort 10.100.73.212 <none> 80:30893/TCP 17s
[root@node1 ~]#curl http://<node-ip>:30893/hello
总结
本文提供了一个完整的示例,展示如何使用Helm在Kubernetes上部署一个Python Flask应用。通过遵循这些步骤,您可以快速地将任何应用打包成Helm图表,并在Kubernetes集群上部署。