helm、kubernetes
安装
1: 配置kubectl认证文件
Windows: $User/.kube/config
Linux: $HOME/.kube/config
2: 下载二进制文件
Windows: https://get.helm.sh/helm-v3.0.0-windows-amd64.zip
Linux: https://get.helm.sh/helm-v3.0.0-linux-amd64.tar.gz
3: 解压拷贝到系统PATH路径下(helm2时代还需要初始化安装tiller-deploy作为服务端)
Windows: C:\Windows\System32
Linux: /usr/bin
help
The Kubernetes package manager
Common actions for Helm:
- helm search: search for charts
- helm pull: download a chart to your local directory to view
- helm install: upload the chart to Kubernetes
- helm list: list releases of charts
Environment variables:
+------------------+-----------------------------------------------------------------------------+
| Name | Description |
+------------------+-----------------------------------------------------------------------------+
| $XDG_CACHE_HOME | set an alternative location for storing cached files. |
| $XDG_CONFIG_HOME | set an alternative location for storing Helm configuration. |
| $XDG_DATA_HOME | set an alternative location for storing Helm data. |
| $HELM_DRIVER | set the backend storage driver. Values are: configmap, secret, memory |
| $HELM_NO_PLUGINS | disable plugins. Set HELM_NO_PLUGINS=1 to disable plugins. |
| $KUBECONFIG | set an alternative Kubernetes configuration file (default "~/.kube/config") |
+------------------+-----------------------------------------------------------------------------+
Helm stores configuration based on the XDG base directory specification, so
- cached files are stored in $XDG_CACHE_HOME/helm
- configuration is stored in $XDG_CONFIG_HOME/helm
- data is stored in $XDG_DATA_HOME/helm
By default, the default directories depend on the Operating System. The defaults are listed below:
+------------------+---------------------------+--------------------------------+-------------------------+
| Operating System | Cache Path | Configuration Path | Data Path |
+------------------+---------------------------+--------------------------------+-------------------------+
| Linux | $HOME/.cache/helm | $HOME/.config/helm | $HOME/.local/share/helm |
| macOS | $HOME/Library/Caches/helm | $HOME/Library/Preferences/helm | $HOME/Library/helm |
| Windows | %TEMP%\helm | %APPDATA%\helm | %APPDATA%\helm |
+------------------+---------------------------+--------------------------------+-------------------------+
Usage:
helm [command]
Available Commands:
completion Generate autocompletions script for the specified shell (bash or zsh)
create create a new chart with the given name
dependency manage a chart's dependencies
env Helm client environment information
get download extended information of a named release
help Help about any command
history fetch release history
install install a chart
lint examines a chart for possible issues
list list releases
package package a chart directory into a chart archive
plugin install, list, or uninstall Helm plugins
pull download a chart from a repository and (optionally) unpack it in local directory
repo add, list, remove, update, and index chart repositories
rollback roll back a release to a previous revision
search search for a keyword in charts
show show information of a chart
status displays the status of the named release
template locally render templates
test run tests for a release
uninstall uninstall a release
upgrade upgrade a release
verify verify that a chart at the given path has been signed and is valid
version print the client version information
Flags:
--add-dir-header If true, adds the file directory to the header
--alsologtostderr log to standard error as well as files
--debug enable verbose output
-h, --help help for helm
--kube-context string name of the kubeconfig context to use
--kubeconfig string path to the kubeconfig file
--log-backtrace-at traceLocation when logging hits line file:N, emit a stack trace (default :0)
--log-dir string If non-empty, write log files in this directory
--log-file string If non-empty, use this log file
--log-file-max-size uint Defines the maximum size a log file can grow to. Unit is megabytes. If the value is 0, the maximum file size is unlimited. (default 1800)
--logtostderr log to standard error instead of files (default true)
-n, --namespace string namespace scope for this request
--registry-config string path to the registry config file (default "C:\\Users\\wangw\\AppData\\Roaming\\helm\\registry.json")
--repository-cache string path to the file containing cached repository indexes (default "C:\\Users\\wangw\\AppData\\Local\\Temp\\helm\\repository")
--repository-config string path to the file containing repository names and URLs (default "C:\\Users\\wangw\\AppData\\Roaming\\helm\\repositories.yaml")
--skip-headers If true, avoid header prefixes in the log messages
--skip-log-headers If true, avoid headers when opening log files
--stderrthreshold severity logs at or above this threshold go to stderr (default 2)
-v, --v Level number for the log level verbosity
--vmodule moduleSpec comma-separated list of pattern=N settings for file-filtered logging
Use "helm [command] --help" for more information about a command.
仓库
# 查看仓库,默认是没有任何仓库的
PS C:\Users\wangw\helm> helm repo list
Error: no repositories to show
# 添加仓库
PS C:\Users\wangw\helm> helm repo add stable https://kubernetes-charts.storage.googleapis.com/
"stable" has been added to your repositories
PS C:\Users\wangw\helm> helm repo list
NAME URL
stable https://kubernetes-charts.storage.googleapis.com/
# 更新仓库
PS C:\Users\wangw\helm> helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "stable" chart repository
Update Complete. ⎈ Happy Helming!⎈
部署app(以mysql为例)
# 搜索mysql,并没有出现mysql应用列表,下面的说明表示要选择hub或者repo
PS C:\Users\wangw\helm> helm search mysql
Search provides the ability to search for Helm charts in the various places
they can be stored including the Helm Hub and repositories you have added. Use
search subcommands to search different locations for charts.
Usage:
helm search [command]
Available Commands:
hub search for charts in the Helm Hub or an instance of Monocular
repo search repositories for a keyword in charts
Flags:
-h, --help help for search
Global Flags:
...
# 在hub上搜索,相当于helm提供的一个公共仓库,类似docker hub
PS C:\Users\wangw\helm> helm search hub mysql
URL CHART VERSION APP VERSION DESCRIPTION
https://hub.helm.sh/charts/rimusz/gcloud-sqlproxy 0.19.1 1.16 Google Cloud SQL Proxy
https://hub.helm.sh/charts/bitnami/phpmyadmin 4.2.3 4.9.1 phpMyAdmin is an mysql administration frontend
https://hub.helm.sh/charts/bitnami/mariadb 7.0.1 10.3.20 Fast, reliable, scalable, and easy to use open-...
https://hub.helm.sh/charts/bitnami/mysql 6.5.1 8.0.18 Chart to create a Highly available MySQL cluster
https://hub.helm.sh/charts/bitnami/mariadb-galera 0.5.1 10.3.20 MariaDB Galera is a multi-master database clust...
https://hub.helm.sh/charts/bitnami/mariadb-cluster 1.0.1 10.2.14 Chart to create a Highly available MariaDB cluster
https://hub.helm.sh/charts/ibm-charts/ibm-maria... 1.1.2 MariaDB is developed as open source software an...
https://hub.helm.sh/charts/ibm-charts/ibm-galer... 1.1.0 Galera Cluster is a multi-master solution for M...
https://hub.helm.sh/charts/incubator/mysqlha 1.0.0 5.7.13 MySQL cluster with a single master and zero or ...
https://hub.helm.sh/charts/banzaicloud-stable/p... 0.2.4 v0.11.0 A Helm chart for prometheus mysql exporter with...
https://hub.helm.sh/charts/banzaicloud-stable/m... 0.1.0 0.2.0 A Helm chart for deploying the Oracle MySQL Ope...
https://hub.helm.sh/charts/banzaicloud-stable/tidb 0.0.2 A TiDB Helm chart for Kubernetes
https://hub.helm.sh/charts/presslabs/mysql-cluster 0.1.2 1.0 A Helm chart for easy deployment of a MySQL clu...
https://hub.helm.sh/charts/presslabs/mysql-oper... 0.3.4 v0.3.4 A Helm chart for mysql operator
https://hub.helm.sh/charts/presslabs/orchestrator 0.1.7 3.0.14 A Helm chart for github's mysql orchestrator
https://hub.helm.sh/charts/kanister/kanister-mysql 0.22.0 5.7.14 MySQL w/ Kanister support based on stable/mysql
https://hub.helm.sh/charts/appscode/stash-mysql 8.0.14 8.0.14 stash-mysql - MySQL database backup and restore...
https://hub.helm.sh/charts/t3n/mysql-backup 1.1.0
https://hub.helm.sh/charts/t3n/cloudsql-proxy 1.0.0 1.15 Google Cloud SQL Proxy
https://hub.helm.sh/charts/stable/percona-xtrad... 1.0.3 5.7.19 free, fully compatible, enhanced, open source d...
https://hub.helm.sh/charts/stable/sapho 0.2.2 A micro application development and integration...
https://hub.helm.sh/charts/stable/mysqldump 2.6.0 2.4.1 A Helm chart to help backup MySQL databases usi...
https://hub.helm.sh/charts/stable/prometheus-my... 0.5.2 v0.11.0 A Helm chart for prometheus mysql exporter with...
https://hub.helm.sh/charts/stable/mysql 1.4.0 5.7.27 Fast, reliable, scalable, and easy to use open-...
https://hub.helm.sh/charts/stable/percona 1.2.0 5.7.17 free, fully compatible, enhanced, open source d...
https://hub.helm.sh/charts/choerodon/mysqld-exp... 0.1.0 1.0 A Helm chart for Kubernetes
https://hub.helm.sh/charts/choerodon/create-mys... 0.1.0 1.0 A Helm chart for Kubernetes
https://hub.helm.sh/charts/choerodon/mysql 0.1.1 0.1.1 A Helm chart for Kubernetes
https://hub.helm.sh/charts/choerodon/mysql-client 0.1.0 0.1.0 mysql Ver 15.1 Distrib 10.1.32-MariaDB, for Lin...
# 在repo上搜索,共有仓库之外,用户自己添加的helm仓库
PS C:\Users\wangw\helm> helm search repo mysql
NAME CHART VERSION APP VERSION DESCRIPTION
stable/mysql 1.4.0 5.7.27 Fast, reliable, scalable, and easy to use open-...
stable/mysqldump 2.6.0 2.4.1 A Helm chart to help backup MySQL databases usi...
stable/prometheus-mysql-exporter 0.5.2 v0.11.0 A Helm chart for prometheus mysql exporter with...
stable/percona 1.2.0 5.7.17 free, fully compatible, enhanced, open source d...
stable/percona-xtradb-cluster 1.0.3 5.7.19 free, fully compatible, enhanced, open source d...
stable/phpmyadmin 4.2.3 4.9.1 phpMyAdmin is an mysql administration frontend
stable/gcloud-sqlproxy 0.6.1 1.11 DEPRECATED Google Cloud SQL Proxy
stable/mariadb 7.0.1 10.3.20 Fast, reliable, scalable, and easy to use open-...
# 部署stable/mysql
PS C:\Users\wangw\helm> helm install stable/mysql -n default
Error: must either provide a name or specify --generate-name
# 提示必须指定名称或者--generate-name自动生成(helm2时代不指定自动生成)
PS C:\Users\wangw\helm> helm install -name mysql stable/mysql -n default
NAME: mysql
LAST DEPLOYED: Mon Nov 18 14:47:09 2019
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
MySQL can be accessed via port 3306 on the following DNS name from within your cluster:
mysql.default.svc.cluster.local
To get your root password run:
MYSQL_ROOT_PASSWORD=$(kubectl get secret --namespace default mysql -o jsonpath="{.data.mysql-root-password}" | base64 --decode; echo)
To connect to your database:
1. Run an Ubuntu pod that you can use as a client:
kubectl run -i --tty ubuntu --image=ubuntu:16.04 --restart=Never -- bash -il
2. Install the mysql client:
$ apt-get update && apt-get install mysql-client -y
3. Connect using the mysql cli, then provide your password:
$ mysql -h mysql -p
To connect to your database directly from outside the K8s cluster:
MYSQL_HOST=127.0.0.1
MYSQL_PORT=3306
# Execute the following command to route the connection:
kubectl port-forward svc/mysql 3306
mysql -h ${MYSQL_HOST} -P${MYSQL_PORT} -u root -p${MYSQL_ROOT_PASSWORD}
# 应用列表
PS C:\Users\wangw\helm> helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
mysql default 1 2019-11-18 14:47:09.0835497 +0800 CST deployed mysql-1.4.0 5.7.27
# 查看应用当前状态
PS C:\Users\wangw\helm> helm status mysql
NAME: mysql
LAST DEPLOYED: Mon Nov 18 14:47:09 2019
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
MySQL can be accessed via port 3306 on the following DNS name from within your cluster:
mysql.default.svc.cluster.local
To get your root password run:
MYSQL_ROOT_PASSWORD=$(kubectl get secret --namespace default mysql -o jsonpath="{.data.mysql-root-password}" | base64 --decode; echo)
To connect to your database:
1. Run an Ubuntu pod that you can use as a client:
kubectl run -i --tty ubuntu --image=ubuntu:16.04 --restart=Never -- bash -il
2. Install the mysql client:
$ apt-get update && apt-get install mysql-client -y
3. Connect using the mysql cli, then provide your password:
$ mysql -h mysql -p
To connect to your database directly from outside the K8s cluster:
MYSQL_HOST=127.0.0.1
MYSQL_PORT=3306
# Execute the following command to route the connection:
kubectl port-forward svc/mysql 3306
mysql -h ${MYSQL_HOST} -P${MYSQL_PORT} -u root -p${MYSQL_ROOT_PASSWORD}
# kubectl查看资源
PS C:\Users\wangw\helm> kubectl get all -n default
NAME READY STATUS RESTARTS AGE
pod/mysql-57f6d6fbbb-pbrn8 1/1 Running 0 5m27s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3h10m
service/mysql ClusterIP 10.110.118.69 <none> 3306/TCP 5m27s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/mysql 1/1 1 1 5m27s
NAME DESIRED CURRENT READY AGE
replicaset.apps/mysql-57f6d6fbbb 1 1 1 5m27s
删除
PS C:\Users\wangw\helm> helm uninstall mysql
release "mysql" uninstalled
# 无需指定--purge选项,默认彻底删除
PS C:\Users\wangw\helm> helm list --all
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
拉取Chart
# 从helm hub
PS C:\Users\wangw\helm> helm pull https://hub.helm.sh/charts/incubator/mysqlha
# 从添加的仓库
PS C:\Users\wangw\helm> helm pull stable/mysql
PS C:\Users\wangw\helm> ls
目录: C:\Users\wangw\helm
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2019/11/18 14:56 10657 mysql-1.4.0.tgz
-a---- 2019/11/18 14:55 3299 mysqlha
创建模板
PS C:\Users\wangw\helm> helm create gistack
Creating gistack
PS C:\Users\wangw\helm> ls
目录: C:\Users\wangw\helm
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2019/11/18 14:57 gistack
-a---- 2019/11/18 14:56 10657 mysql-1.4.0.tgz
-a---- 2019/11/18 14:55 3299 mysqlha
PS C:\Users\wangw\helm> ls .\gistack\
目录: C:\Users\wangw\helm\gistack
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2019/11/18 14:57 charts
d----- 2019/11/18 14:57 templates
-a---- 2019/11/18 14:57 342 .helmignore
-a---- 2019/11/18 14:57 905 Chart.yaml
-a---- 2019/11/18 14:57 1490 values.yaml
转化Chart为kubernetes yaml
PS C:\Users\wangw\helm> helm template stable/mysql
---
# Source: mysql/templates/secrets.yaml
apiVersion: v1
kind: Secret
metadata:
name: RELEASE-NAME-mysql
namespace: default
labels:
app: RELEASE-NAME-mysql
chart: "mysql-1.4.0"
release: "RELEASE-NAME"
heritage: "Helm"
type: Opaque
data:
mysql-root-password: "ajgwdGVtTUwydw=="
mysql-password: "MXI3eEVVQ0w2NQ=="
---
# Source: mysql/templates/tests/test-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: RELEASE-NAME-mysql-test
namespace: default
labels:
app: RELEASE-NAME-mysql
chart: "mysql-1.4.0"
heritage: "Helm"
release: "RELEASE-NAME"
data:
run.sh: |-
---
# Source: mysql/templates/pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: RELEASE-NAME-mysql
namespace: default
labels:
app: RELEASE-NAME-mysql
chart: "mysql-1.4.0"
release: "RELEASE-NAME"
heritage: "Helm"
spec:
accessModes:
- "ReadWriteOnce"
resources:
requests:
storage: "8Gi"
---
# Source: mysql/templates/svc.yaml
apiVersion: v1
kind: Service
metadata:
name: RELEASE-NAME-mysql
namespace: default
labels:
app: RELEASE-NAME-mysql
chart: "mysql-1.4.0"
release: "RELEASE-NAME"
heritage: "Helm"
annotations:
spec:
type: ClusterIP
ports:
- name: mysql
port: 3306
targetPort: mysql
selector:
app: RELEASE-NAME-mysql
---
# Source: mysql/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: RELEASE-NAME-mysql
namespace: default
labels:
app: RELEASE-NAME-mysql
chart: "mysql-1.4.0"
release: "RELEASE-NAME"
heritage: "Helm"
spec:
selector:
matchLabels:
app: RELEASE-NAME-mysql
release: RELEASE-NAME
template:
metadata:
labels:
app: RELEASE-NAME-mysql
release: RELEASE-NAME
spec:
initContainers:
- name: "remove-lost-found"
image: "busybox:1.29.3"
imagePullPolicy: "IfNotPresent"
resources:
requests:
cpu: 10m
memory: 10Mi
command: ["rm", "-fr", "/var/lib/mysql/lost+found"]
volumeMounts:
- name: data
mountPath: /var/lib/mysql
# - name: do-something
# image: busybox
# command: ['do', 'something']
containers:
- name: RELEASE-NAME-mysql
image: "mysql:5.7.14"
imagePullPolicy: "IfNotPresent"
resources:
requests:
cpu: 100m
memory: 256Mi
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: RELEASE-NAME-mysql
key: mysql-root-password
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
name: RELEASE-NAME-mysql
key: mysql-password
optional: true
- name: MYSQL_USER
value: ""
- name: MYSQL_DATABASE
value: ""
ports:
- name: mysql
containerPort: 3306
livenessProbe:
exec:
command:
- sh
- -c
- "mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD}"
initialDelaySeconds: 30
periodSeconds: 10
timeoutSeconds: 5
successThreshold: 1
failureThreshold: 3
readinessProbe:
exec:
command:
- sh
- -c
- "mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD}"
initialDelaySeconds: 5
periodSeconds: 10
timeoutSeconds: 1
successThreshold: 1
failureThreshold: 3
volumeMounts:
- name: data
mountPath: /var/lib/mysql
# - name: extras
# mountPath: /usr/share/extras
# readOnly: true
volumes:
- name: data
persistentVolumeClaim:
claimName: RELEASE-NAME-mysql
# - name: extras
# emptyDir: {}
---
# Source: mysql/templates/tests/test.yaml
apiVersion: v1
kind: Pod
metadata:
name: RELEASE-NAME-mysql-test
namespace: default
labels:
app: RELEASE-NAME-mysql
chart: "mysql-1.4.0"
heritage: "Helm"
release: "RELEASE-NAME"
annotations:
"helm.sh/hook": test-success
spec:
initContainers:
- name: test-framework
image: "dduportal/bats:0.4.0"
command:
- "bash"
- "-c"
- |
set -ex
# copy bats to tools dir
cp -R /usr/local/libexec/ /tools/bats/
volumeMounts:
- mountPath: /tools
name: tools
containers:
- name: RELEASE-NAME-test
image: "mysql:5.7.14"
command: ["/tools/bats/bats", "-t", "/tests/run.sh"]
volumeMounts:
- mountPath: /tests
name: tests
readOnly: true
- mountPath: /tools
name: tools
volumes:
- name: tests
configMap:
name: RELEASE-NAME-mysql-test
- name: tools
emptyDir: {}
restartPolicy: Never