K 8 SにHelmを配備

13996 ワード

K 8 Sにおけるパッケージ管理ツール
1.クライアントHelm(つまりHelm)
 スクリプトによるインストール:curl https://raw.githubusercontent.com/helm/helm/master/scripts/get > helm.sh、実行権限付与:
chmod +x helm.sh
./helm.sh

#   
Downloading https://kubernetes-helm.storage.googleapis.com/helm-v2.13.1-linux-amd64.tar.gz
Preparing to install helm and tiller into /usr/local/bin
helm installed into /usr/local/bin/helm
tiller installed into /usr/local/bin/tiller
Run 'helm init' to configure helm.

#   
helm help

注意:スクリプト実行時に発生する可能性がありますcurl: (7) Failed connect to kubernetes-helm.storage.googleapis.com:443; 異常情報は、複数回実行してください.
2.サービス側Tiller
直接helm init、K 8 SクラスタにTiller(kube-systemネーミングスペースに)をインストールすることができますが、実行時にヒントが成功しましたが、K 8 Sはコンテナの状態を確認してFailed to pull image "gcr.io/kubernetes-helm/tiller:v2.13.1"....の異常があり、確認tiller-deploymentのyamlファイルはコンテナのミラーがgcr.io/kubernetes-helm/tiller:v2.13.1となっています.dockerhubに行ってGoogleのレプリケーションミラーの名前空間を確認するmirrorgooglecontainersあるかどうか、またユーザーミラーがあるかどうかを確認しないdocker search tiller:v2.13.1、ユーザーのミラーを引いてtagを修正し、古いものを削除する(ノードごとにやることをお勧めしますが、セレクタは指定されていない可能性があります):
docker pull hekai/gcr.io_kubernetes-helm_tiller_v2.13.1
docker tag hekai/gcr.io_kubernetes-helm_tiller_v2.13.1 gcr.io/kubernetes-helm/tiller:v2.13.1
docker rmi hekai/gcr.io_kubernetes-helm_tiller_v2.13.1

podが正常に確認されました.
tillerライセンス:
#     
kubectl create serviceaccount --namespace kube-system tiller
kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller

#    kubectl patch    API   
kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'

#         
kubectl get deploy --namespace kube-system   tiller-deploy  --output yaml|grep  serviceAccount

serviceAccount: tiller
serviceAccountName: tiller


helm version

Client: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}

アンインストールtiller:helm resetまたはhelm reset --force3.使用
Helm chart(Helmのパッケージの形式をchartと呼びます):
#       
git clone https://github.com/daemonza/testapi.git;

cd testapi
#   chart  
helm create testapi-chart

生成されたchartスケルトンは次のとおりです.
testapi-chart ├── charts ├── Chart.yaml ├── templates │ ├── deployment.yaml │ ├── _helpers.tpl │ ├── ingress.yaml │ ├── NOTES.txt | ├── service.yaml │ └── tests └── values.yaml
ここでtemplatesディレクトリにはK 8 S配置ファイルのテンプレート、Chartが格納されている.yamlファイルは次のとおりです.
# chartAPI   ,      v1
apiVersion: v1
#     
appVersion: "1.0"
#     
description: A Helm chart for Kubernetes
# chart   ,    
name: testapi-chart
# chart    ,    ,    SemVer
version: 0.1.0

ここでvalues.yamlファイルは次のとおりです.
# Default values for testapi-chart.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.

replicaCount: 1

image:
  repository: nginx
  tag: stable
  pullPolicy: IfNotPresent

nameOverride: ""
fullnameOverride: ""

service:
  type: ClusterIP
  port: 80

ingress:
  enabled: false
  annotations: {}
    # kubernetes.io/ingress.class: nginx
    # kubernetes.io/tls-acme: "true"
  hosts:
    - host: chart-example.local
      paths: []

  tls: []
  #  - secretName: chart-example-tls
  #    hosts:
  #      - chart-example.local

resources: {}
  # We usually recommend not to specify default resources and to leave this as a conscious
  # choice for the user. This also increases chances charts run on environments with little
  # resources, such as Minikube. If you do want to specify resources, uncomment the following
  # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
  # limits:
  #   cpu: 100m
  #   memory: 128Mi
  # requests:
  #   cpu: 100m
  #   memory: 128Mi

nodeSelector: {}

tolerations: []

affinity: {}

アクセス可能Chart.yaml所在ディレクトリ実行チャート:
cd testapi-chart

#   chart
helm lint

全てOKなら梱包可能(Chart.yamlの親目録外):
# --debug    ,        ,testapi-chart     chart  ,          
helm package testapi-chart --debug

#   
Successfully packaged chart and saved it to: /root/k8s/helm/testapi/testapi-chart-0.1.0.tgz
[debug] Successfully saved /root/k8s/helm/testapi/testapi-chart-0.1.0.tgz to /root/.helm/repository/local

現在のディレクトリにパッケージ化され、ローカルのhelm倉庫に直接公開することもできます:helm install testapi-chart-0.1.0.tgz、出力は以下の通りです.
NAME:   lumbering-zebu
LAST DEPLOYED: Fri Apr 26 18:54:26 2019
NAMESPACE: default
STATUS: DEPLOYED

RESOURCES:
==> v1/Deployment
NAME                          READY  UP-TO-DATE  AVAILABLE  AGE
lumbering-zebu-testapi-chart  0/1    1           0          0s

==> v1/Pod(related)
NAME                                           READY  STATUS             RESTARTS  AGE
lumbering-zebu-testapi-chart-7fb48fc7b6-n6824  0/1    ContainerCreating  0         0s

==> v1/Service
NAME                          TYPE       CLUSTER-IP  EXTERNAL-IP  PORT(S)  AGE
lumbering-zebu-testapi-chart  ClusterIP  10.97.1.55         80/TCP   0s


NOTES:
1. Get the application URL by running these commands:
  export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=testapi-chart,app.kubernetes.io/instance=lumbering-zebu" -o jsonpath="{.items[0].metadata.name}")
  echo "Visit http://127.0.0.1:8080 to use your application"
  kubectl port-forward $POD_NAME 8080:80

すでにK 8 Sに作成されているdeploymentデフォルトのネーミングスペースを見ると1つ増えているlumbering-zebu-testapi-chartDeployment、deploymentのパッケージを見ることができます:
helm ls

#   
NAME          	REVISION	UPDATED                 	STATUS  	CHART              	APP VERSION	NAMESPACE
lumbering-zebu	1       	Fri Apr 26 18:54:26 2019	DEPLOYED	testapi-chart-0.1.0	1.0        	default

Chartのパッケージバージョンを変更0.1.0->0.1.1、パッケージ、リリースを再実行し、再度表示する:
kubectl get deployments

NAME                           READY   UP-TO-DATE   AVAILABLE   AGE
lumbering-zebu-testapi-chart   1/1     1            1           13m
odd-chicken-testapi-chart      1/1     1            1           85s

2つ出てきましたが、現在は旧バージョンのdeploymentを削除するchart:helm delete lumbering-zebu-testapi-charthelm lsおよびkubectl get pods旧バージョンのdeploymentが削除されていることがわかります.削除後もロールバックできます.
#  testapi      1   ,    -testapi-chart
helm rollback lumbering-zebu 1
#   
Rollback was a success! Happy Helming!
#   
helm ls

ただし、この場合は削除されたパッケージの名前を覚えておく必要があります.実際にはhelm ls --deleted削除されたパッケージの名前を表示できます.
 アップグレード、関連するChartを修正することができます.yamlファイル後、そのディレクトリで直接実行helm upgrade odd-chicken .コマンドで更新できます.
#   
helm ls
#      
NAME       	REVISION	UPDATED                 	STATUS  	CHART               	APP VERSION	NAMESPACE
odd-chicken	2       	Fri Apr 26 19:26:21 2019	DEPLOYED	testapi-chart2-2.1.1	2.0        	default

【Helm倉庫の設置】
 ますますこれがmvnに似ていると感じて、Helmの倉庫は1つのWEBサーバーで、例えばchartsディレクトリからhelmサービスを提供します:helm serve --repo-path ./charts.また、Chartサービスの管理については、WEBページを提供するためにMonocularをインストールする必要がある場合があります.インストール手順は以下の通りです.
#         
docker pull registry.cn-shanghai.aliyuncs.com/hhu/defaultbackend:1.4
docker tag registry.cn-shanghai.aliyuncs.com/hhu/defaultbackend:1.4 k8s.gcr.io/defaultbackend:1.4
docker rmi registry.cn-shanghai.aliyuncs.com/hhu/defaultbackend:1.4

#   Nginx Ingress controller
helm install stable/nginx-ingress --set controller.hostNetwork=true,rbac.create=true

#    (    )
helm repo add monocular https://helm.github.io/monocular
#   monocular
helm install monocular/monocular

そして待って、インストールが終わったら、
【Helm倉庫の使用】
 HelmetをHelmウェアハウスとして使用し、K 8 Sクラスタに配備してChartを追加することができます.