Helm 在Kubernetes中的应用

引言

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集群上部署。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值