練習ノート
現在、kubernetesにredisマスタースレーブプロジェクトがデプロイされています。このプロジェクトを他のユーザーに配布する場合、通常は関連する構成ファイルとドキュメントを配信するため、問題が発生します。より良い方法はありますか?、他の人が1つのコマンドで直接プロジェクトを開始できるようにします。他の多くの追加操作を行う必要はありません。現在人気のあるパッケージ管理ツールであるヘルムでは、オンラインプロジェクトを変換する方法を練習します。
変換のプロジェクトオブジェクトは、次のドキュメントを参照できます:
Kubernetes Deploying Redis Master-Slave Service(StatefulSet)
https://blog.51cto.com/4073279/2676397
実用的な手順
- テンプレートファイルパッケージを作成する
$ helm create redis-ms $ cd redis-ms $ rmdir charts #删除这些文件 $ rm -f deployment.yaml hpa.yaml ingress.yaml serviceaccount.yaml NOTES.txt $rm -rf tests #最后的项目结构 $ tree -L 2 . ├── Chart.yaml ├── templates │ ├── _helpers.tpl │ ├── NOTES.txt │ ├── service.yaml │ └── tests └── values.yaml
- 分析
1)最初に、再利用して簡単に変更できるフィールドを分析し、次にそれらを変数値としてvalues.yamlに配置します- APP名
- ラベル名
- ミラー名
- 部数
- PODリソース制限
- HPA
2)使用するスクリプトなど、大きなコンテンツの場合は、テンプレート値として_helpers.tplファイルに配置します。
例:Configmapのコンテンツ
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Values.appName }}-config
data:
launch.sh: |
#!/bin/bash
PASSWORD=$(cat /etc/redis-passwd/passwd)
if [ "${HOSTNAME}" == "redis-0" ]
then
redis-server --requirepass ${PASSWORD}
else
redis-server --slaveof redis-0.redis 6379 --masterauth ${PASSWORD} --requirepass ${PASSWORD}
fi
....
- 変更操作
1)values.yamlファイルの内容を入力します
#APP名称
appName: redis
#标签
labels: redis
#副本数
replicaCount: 2
#镜像资源配置
image:
repository: redis
pullPolicy: IfNotPresent
tag: "5-alpine"
imagePullSecrets: []
#Service资源配置
service:
type: None
port: 6379
#POD资源限制
resources:
enabled: false
limits:
cpu: 100m
memory: 128Mi
requests:
cpu: 100m
memory: 128Mi
#redis密码
redis:
passwd: password
2)変換サービス
$ cat templates/service.yaml
apiVersion: v1
kind: Service
metadata:
name: {{ .Values.appName }}
labels:
app: {{ .Values.labels }}
spec:
ports:
- port: {{ .Values.service.port }}
name: redis
#StatefulSet资源Service默认是没有集群IP的
clusterIP: None
selector:
app: {{ .Values.labels }}
3)configmapを変更します
$ cat redis-ms/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Values.appName }}-config
data:
{{- include "launch" . |indent 2}}
4)シークレットを変更し、values.yamlにパスワードを書き込みます
$ cat redis-ms/templates/secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: redis-passwd
stringData:
passwd: {{ .Values.redis.passwd }}
5)ステートフルセットを変換する
$ cat redis-ms/templates/statefulset.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: {{ .Values.appName }}
spec:
serviceName: {{ .Values.appName }}
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: {{ .Values.labels }}
template:
metadata:
labels:
app: {{ .Values.labels }}
spec:
containers:
- name: {{ .Values.appName }}
image:{{ .Values.image.repository }}:{{ .Values.image.tag }}
ports:
- containerPort: 6379
volumeMounts:
- name: data
mountPath: /data
- name: script
mountPath: /script/launch.sh
subPath: launch.sh
- name: passwd-volume
mountPath: /etc/redis-passwd
command:
- sh
- -c
- sleep 10 && sh /script/launch.sh
{{- if .Values.resources.enabled }}
resources:
limits:
cpu: {{ .Values.resources.limits.cpu }}
memory: {{ .Values.resources.limits.memory }}
requests:
cpu: {{ .Values.resources.requests.cpu }}
memory: {{ .Values.resources.requests.memory }}
{{ end }}
volumes:
- name: script
configMap:
name: redis-config
defaultMode: 0777
- name: passwd-volume
secret:
secretName: redis-passwd
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 1Gi
6)検証とパッケージング
#语法验证,主要是渲染输出,检查是否有异常问题
$ helm install redis-ms -n developer --dry-run redis-ms/
#部署
$ helm install redis-ms -n developer redis-ms/
#将项目打包,然后就可以将redis-ms-0.1.0.tgz发给他人
$ helm package redis-ms
Successfully packaged chart and saved it to: /root/redis-slave-statefulset/redis-ms-0.1.0.tgz
#通过一条命令启动项目,看,是不是很方便
$ helm install redis-ms redis-ms-0.1.0.tgz -n developer
NAME: redis-ms
LAST DEPLOYED: Wed Mar 31 10:16:02 2021
NAMESPACE: developer
STATUS: deployed
REVISION: 1
TEST SUITE: None
$ helm list -n developer
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
redis-ms developer 1 2021-03-31 10:16:02.690429125 +0800 CST deployed redis-ms-0.1.0 1.16.0
$ kubectl logs -f redis-0 -n developer
9:C 31 Mar 2021 02:16:23.867 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
9:C 31 Mar 2021 02:16:23.867 # Redis version=5.0.10, bits=64, commit=00000000, modified=0, pid=9, just started
9:C 31 Mar 2021 02:16:23.867 # Configuration loaded
9:M 31 Mar 2021 02:16:23.868 * Running mode=standalone, port=6379.
9:M 31 Mar 2021 02:16:23.868 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
9:M 31 Mar 2021 02:16:23.868 # Server initialized
9:M 31 Mar 2021 02:16:23.868 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
9:M 31 Mar 2021 02:16:23.869 * DB loaded from disk: 0.001 seconds
9:M 31 Mar 2021 02:16:23.869 * Ready to accept connections
9:M 31 Mar 2021 02:16:25.881 * Replica 10.244.1.126:6379 asks for synchronization
9:M 31 Mar 2021 02:16:25.881 * Partial resynchronization not accepted: Replication ID mismatch (Replica asked for '75640cf19c78b679a8e581b84c2b05855d17c931', my replication IDs are '6ad76548f491d5547947835322c98520c843c0c0' and '0000000000000000000000000000000000000000')
9:M 31 Mar 2021 02:16:25.881 * Starting BGSAVE for SYNC with target: disk
9:M 31 Mar 2021 02:16:25.881 * Background saving started by pid 13
13:C 31 Mar 2021 02:16:25.883 * DB saved on disk
13:C 31 Mar 2021 02:16:25.883 * RDB: 0 MB of memory used by copy-on-write
9:M 31 Mar 2021 02:16:25.979 * Background saving terminated with success
9:M 31 Mar 2021 02:16:25.980 * Synchronization with replica 10.244.1.126:6379 succeeded
練習のまとめ
プロジェクトの展開方法をHelmのインストール方法に変換するプロセスも、Helmのレビューです。Helmは実際には非常に単純です。主なコアは、共通の、変更可能で、安定した、変更されていない現在のプロジェクトを考えて分析することです。それらを抽出してから、テンプレート、ループ、判断など、Helmが提供するいくつかの機能機能を使用して、それらをコンパイル、入力、および改善します。
完全なチャートパッケージを添付してください:リンク:https://share.weiyun.com/X8JzQY5lパスワード:uik42u