使用 Helm 包管理工具簡化 Kubernetes 應用部署
當在 Kubernetes 中已經部署很多應用時,後續需要對每個應用的 yaml 檔案進行維護操作,這個過程會變的很繁瑣,我們可以使用 Helm 來簡化這些工作。Helm 是 Kubernetes 的一個包管理工具,用來簡化 Kubernetes 應用的部署和管理。
部署 Helm 客戶端與服務端
部署客戶端
在 GitHub上 Helm Realese 下載最新的二進位制檔案
$ tar -zxvf helm-v2.11.0-linux-amd64.tar.gz $ mv linux-amd64/helm /usr/local/bin/helm $ helm help
部署服務端(tiller )
$ helm init --upgrade --tiller-image sapcc/tiller:v2.11.0 Creating /root/.helm Creating /root/.helm/repository Creating /root/.helm/repository/cache Creating /root/.helm/repository/local Creating /root/.helm/plugins Creating /root/.helm/starters Creating /root/.helm/cache/archive Creating /root/.helm/repository/repositories.yaml Adding stable repo with URL: https://kubernetes-charts.storage.googleapis.com Adding local repo with URL: http://127.0.0.1:8879/charts $HELM_HOME has been configured at /root/.helm. Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster. Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy. To prevent this, run `helm init` with the --tiller-tls-verify flag. For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation Happy Helming!
檢視
$ kubectl get pod -n kube-system -l app=helm NAME READY STATUS RESTARTS AGE tiller-deploy-69c9dc58bd-jvzkr 1/1 Running 0 3m2s $ helm version Client: &version.Version{SemVer:"v2.11.0", GitCommit:"2e55dbe1fdb5fdb96b75ff144a339489417b146b", GitTreeState:"clean"} Server: &version.Version{SemVer:"v2.11.0", GitCommit:"2e55dbe1fdb5fdb96b75ff144a339489417b146b", GitTreeState:"clean"}
配置 RBAC
$ vi rbac-config.yaml apiVersion: v1 kind: ServiceAccount metadata: name: tiller namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: tiller roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: tiller namespace: kube-system執行
$ kubectl create -f rbac-config.yaml serviceaccount/tiller created clusterrolebinding.rbac.authorization.k8s.io/tiller created $ kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}' deployment.extensions/tiller-deploy patched
備註:上述我們為 Tiller 管理員提供了對整個群集的訪問許可權,如果不需要授予 Tiller 叢集管理員訪問許可權,可以指定 Role 和 RoleBinding 來將 Tiller 的範圍限制為特定的 namespace 中,官方文件是新建一個 namespace 做的(https://docs.helm.sh/using_helm/#role-based-access-control) 。
部署一個程式
建立一個配置檔案
$ helm create helm-test Creating helm-test $ tree. ├── helm-test │ ├── charts │ ├── Chart.yaml │ ├── templates │ │ ├── deployment.yaml │ │ ├── _helpers.tpl │ │ ├── ingress.yaml │ │ ├── NOTES.txt │ │ └── service.yaml │ └── values.yaml
檔案說明:
- charts 目錄中檔案是本 chart 依賴的 chart,當前是空的 。
- Chart.yaml 這個 yaml 檔案用於描述 Chart 的基本資訊,如名稱,版本等。
- templates 是 Kubernetes manifest 檔案模板目錄,模板使用 chart 配置的值生成 Kubernetes manifest 檔案,還包含部署 Pod 依賴的 deploymnet,ingress,service 物件。
- templates/NOTES.txt 純文字檔案,可在其中填寫 chart 的使用說明。
- value.yaml 是 chart 配置的預設值。
檢視 value.yaml (可以知道部署的是一個 Nginx 服務)
# cat values.yaml # Default values for helm-test. # 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" path: / hosts: - chart-example.local 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: {}
部署應用
$ helm install ./helm-test NAME: famous-bison LAST DEPLOYED: Fri Nov 2 19:50:16 2018 NAMESPACE: default STATUS: DEPLOYED RESOURCES: ==> v1/Service NAME AGE famous-bison-helm-test 0s ==> v1beta2/Deployment famous-bison-helm-test 0s ==> v1/Pod(related) NAME READY STATUS RESTARTS AGE famous-bison-helm-test-8568b9cb46-969pn 0/1 ContainerCreating 0 0s NOTES: 1. Get the application URL by running these commands: export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=helm-test,app.kubernetes.io/instance=famous-bison" -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
檢視
$ kubectl get pods --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE default musty-shark-helm-test-578886d7b9-sdppq 1/1 Running 0 82s $ kubectl get services --all-namespaces NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3d3h default musty-shark-helm-test ClusterIP 10.102.19.244 <none> 80/TCP 2m29s
Helm 命令
$ helm list NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE famous-bison 1 Fri Nov 2 19:50:16 2018 DEPLOYED helm-test-0.1.0 1.0 default $ helm list NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE famous-bison 1 Fri Nov 2 19:50:16 2018 DEPLOYED helm-test-0.1.0 1.0 default $ helm package helm-test Successfully packaged chart and saved it to: /opt/helm/helm-test-0.1.0.tgz $ helm delete famous-bison release "famous-bison" deleted
Helm 倉庫
Helm 也包含 Repo 倉庫的功能與 Docker Registry 比較類似
$ helm repo list NAME URL stable https://kubernetes-charts.storage.googleapis.com local http://127.0.0.1:8879/charts
不過這個映象同樣是被 Ban ,我們也可以自己搭建自己的倉庫用於自定義的包版本管理。通過 helm search 命令可以找到我們想要的 chart 包,然後通過 helm install 命令來安裝。
$ helm search redis NAME CHART VERSION APP VERSION DESCRIPTION stable/prometheus-redis-exporter 0.3.2 0.21.1 Prometheus exporter for Redis metrics stable/redis 4.2.6 4.0.11 Open source, advanced key-value store. It is often referr... stable/redis-ha 3.0.0 4.0.11 Highly available Kubernetes implementation of Redis stable/sensu 0.2.3 0.28 Sensu monitoring framework backed by the Redis transport
安裝
$ helm install stable/redis
備註:
官方應用同步源
相關推薦
使用 Helm 包管理工具簡化 Kubernetes 應用部署
當在 Kubernetes 中已經部署很多應用時,後續需要對每個應用的 yaml 檔案進行維護操作,這個過程會變的很繁瑣,我們可以使用 Helm 來簡化這些工作。Helm 是 Kubernetes 的一個包管理工具,用來簡化 Kubernetes 應用的部署和管理。 部署 Helm 客戶端與服務端 部署客戶端
使用Helm包管理工具在kubernetes上部署EFK
簡介 收集日誌: 第一種:外接收集日誌,在節點上部署一個統一日誌收集外掛,這個外掛統一收集這個節點包括節點中的pod的日誌 第二種:在每個pod中單獨收集日誌,需要在每個pod中部署一個sidecar容器收集日誌傳送給日誌收集平臺,pod數量多的話這種部署麻煩
簡化Kubernetes應用部署工具
【編者的話】微服務和容器化給複雜應用部署與管理帶來了極大的挑戰。Helm是目前Kubernetes服務編排領域的唯一開源子專案,做為Kubernetes應用的一個包管理工具,可理解為Kubernetes的apt-get / yum,由Deis 公司發起,該公司已經被微軟收購。Helm通過軟體
利用Helm簡化Kubernetes應用部署(1)
目錄 利用Helm簡化Kubernetes應用部署 Helm基礎 安裝Helm 使用Visual Studio 2019為Helm編寫一個簡單的應用 利
利用Helm簡化Kubernetes應用部署(2)
目錄 定義Charts 使用Helm部署Demo Helm常用操作命令 定義Charts 回到之前的“charts”目錄,我們依次進行解讀並進行簡單的修改。 Chart.yaml 配置示例:
是時候使用Helm了:Helm, Kubernetes的包管理工具_Kubernetes中文社群
目前我們的一個產品共有4套環境:dev環境、test環境、staging環境、production環境。 其中dev, test, staging環境在一個Kubernetes叢集上以不同namespace部署,production環境部署在另一個Kubernetes叢集上。這個產品總共有14
Kubernetes-17:Kubernets包管理工具—>Helm介紹與使用
Kubernets包管理工具—>Helm 什麼是Helm? 我們都知道,Linux系統各發行版都有自己的包管理工具,比如Centos的YUM,再如Ubuntu的APT。 Kubernetes也有自己的叢集包管理工具,那就是Helm。 Helm本質就是讓K8S的應用管理(Deployment,
replicatedhq-ship 基於Kustomize 專案的快速kubernetes 應用部署工具
replicatedhq-ship 是對Kustomize 專案的擴充套件,我們可以用它來快速的進行三方應用的管理部署, 可以和helm,kubernetes 清單檔案,knative 整合,我們可以方便的進行更新,配置修改,ship 可以 保證與上游變更的同步,而且不會發生git 的合併衝突 安裝
npm包管理工具在一般專案中的應用方法
最近自己在有時間,在通學一些知識點,記錄一下,以便以後使用方面 當我們在做專案的時候,如果需要到包管理工具,那麼我們一定會經歷以下流程: 1、首先在官網下載node.js,然後預設安裝到C盤 檢查是否安裝node成功?win+r 輸入cmd開啟命令列,輸入node -v,如果出現版本號則證明安裝成功
kubernetes1.13.1集群安裝包管理工具helm
issue known log -s dep pip blog .cn ear 參考文檔 https://github.com/goharbor/harbor-helm https://docs.helm.sh/using_helm/#installing-helm htt
Python包管理工具(pip)
too led -i min date pycuda nts nbsp env 1 前言 pip 是一個Python包管理工具,主要是用於安裝 PyPI 上的軟件包,可以替代 easy_install 工具。 GitHub: https://github.
Python包管理工具pip的基本使用
1.0 配置 .net 簡介 pac com 新的 png == 參考網址:https://pip.pypa.io/en/latest/quickstart/ 1.簡介 pip 是一個Python包管理工具,主要是用於安裝 PyPI 上的軟件包,可以替代 easy_inst
iOS包管理工具Cocoapods的安裝與使用
data == 鏡像 tracking libtool 們的 install 包管理 問題解決 在我們開發移動應用的時候,一般都會使用到第三方工具,而因為第三方類庫的種類繁多,我們在項目中進行管理也會相對麻煩,所以此時我們就須要一個包管理工具。在iOS開發中
windows安裝python包管理工具pip
pipwindows安裝python包管理工具pip pip 是一個Python包管理工具,主要是用於安裝 PyPI 上的軟件包,可以替代 easy_install 工具。一、前期準備 首先確認windows機器上面是否已經安裝好了python。在cmd中輸入python --version和py
Linux 入門記錄:二十、Linux 包管理工具 YUM
倉庫 清理 bug entos 需要 tro eat 參數 基於組 一、YUM(Yellowdog Updater, Modified) 1. yum 簡介 RPM 軟件包形式管理軟件雖然方便,但是需要手動解決軟件包的依賴問題。很多時候安裝一個軟件首先需要安裝 1 個或
9、程序包管理工具
程序包管理1、程序包的組成: 由四部分組成:二進制格式文件、庫文件、配置文件、及幫助文件。 2、程序包管理工具作用:管理工具用來管理程序的安裝、升級、卸載、查詢、校驗等操作。3、項目構建工具:用來解決哪些源文件先編譯,哪些庫文件先編譯,源文件和庫文件的依賴關系。c、c++:程序包項目構建工具:makejava
python3包管理工具問題
工具 kaa dpa ec2 使用 rpi cux mod wpa 關於使用鏈表求兩個集合的交集並集和差集的問題 精通正則表達式七:占有優先量詞和量化分組 Shell腳本的靜態檢查工具shellcheck 反射_程序集_打包庫文件_引用庫文件 yq7人餒缺http:
[golang] Glide 包管理工具,在windows10 64位系統上的bug修復方案
環境 all 管理工具 oos for 討論 pos inb direct bug重現 [ERROR] Unable to export dependencies to vendor directory: Error moving files: exit status 1
Python的支持工具[0] -> 環境包管理工具 -> Anaconda
times 自動集成 conda python版本 rom 信息 常用 安裝環境 https Anaconda包管理工具 / Anaconda Package Management Tools Anaconda is the world’s most popular
Python的支持工具[0] -> 環境包管理工具 -> pip
版本 net ber body ins 包管理工具 csdn strong 軟件 pip包管理工具 / pip Package Management Tools pip是一個Python包管理工具,主要是用於安裝PyPI上的軟件包,可以替代easy_install工具