Helm安裝和專案使用
整體架構
1.為什麼要用?
首先在原來專案中都是基於yaml檔案來進行部署釋出的,而目前專案大部分微服務化或者模組化,會分成很多個元件來部署,每個元件可能對應一個deployment.yaml,一個service.yaml,一個Ingress.yaml還可能存在各種依賴關係,這樣一個專案如果有5個元件,很可能就有15個不同的yaml檔案,這些yaml分散存放,如果某天進行專案恢復的話,很難知道部署順序,依賴關係等,而所有這些包括
- 基於yaml配置的集中存放
- 基於專案的打包
- 元件間的依賴
都可以通過helm來進行解決。
2.Helm 基本概念
Helm 可以理解為 Kubernetes 的包管理工具,可以方便地發現、共享和使用為Kubernetes構建的應用,它包含幾個基本概念
- Chart:一個 Helm 包,其中包含了執行一個應用所需要的映象、依賴和資源定義等,還可能包含 Kubernetes 叢集中的服務定義
- Release: 在 Kubernetes 叢集上執行的 Chart 的一個例項。在同一個叢集上,一個 Chart 可以安裝很多次。每次安裝都會建立一個新的 release。例如一個 MySQL Chart,如果想在伺服器上執行兩個資料庫,就可以把這個 Chart 安裝兩次。每次安裝都會生成自己的 Release,會有自己的 Release 名稱。
- Repository:用於釋出和儲存 Chart 的倉庫。
3.Helm 元件及架構
Helm 採用客戶端/伺服器架構,有如下元件組成:
- Helm CLI 是 Helm 客戶端,可以在本地執行
- Tiller 是伺服器端元件,在 Kubernetes 群集上執行,並管理 Kubernetes 應用程式的生命週期
- Repository 是 Chart 倉庫,Helm客戶端通過HTTP協議來訪問倉庫中Chart的索引檔案和壓縮包。
4.Helm的安裝
在下列網站下載helm的相關版本
https://github.com/kubernetes/helm/releases
tar -xvzf $HELM.tar.gz
mv linux-amd64/helm /usr/local/bin/helm
在K8s節點上配置.kube/config(我是因為之前沒搞這些,大家如果搞過就直接忽略)
[[email protected]1 ~]# kubectl config set-cluster kubernetes --server=http://192.168.0.104:8080 Cluster "kubernetes" set. [[email protected]-node-1 ~]# kubectl config set-credentials admin User "admin" set. [[email protected]-node-1 ~]# kubectl config set-context kubernetes \ > --cluster=kubernetes \ > --user=admin Context "kubernetes" set. [[email protected]-node-1 ~]# kubectl config use-context kubernetes Switched to context "kubernetes".
- 執行安裝
先建立使用者和角色。
apiVersion: v1 kind: ServiceAccount metadata: name: tiller namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: tiller roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: tiller namespace: kube-system
[[email protected]-node-1 ~]# helm init --service-account tiller --skip-refresh $HELM_HOME has been configured at /root/.helm. Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster. Happy Helming!
然後去檢視
[[email protected]1 ~]# kubectl get pod -n kube-system -l app=helm NAME READY STATUS RESTARTS AGE tiller-deploy-3018021184-dxpfj 0/1 ContainerCreating 0 26s
[[email protected]1 ~]# kubectl describe pods tiller-deploy-3018021184-dxpfj -n kube-system Name: tiller-deploy-3018021184-dxpfj Namespace: kube-system Node: k8s-node-1/192.168.0.105 Start Time: Fri, 23 Feb 2018 18:41:28 +0800 Labels: app=helm name=tiller pod-template-hash=3018021184 Status: Pending IP: Controllers: ReplicaSet/tiller-deploy-3018021184 Containers: tiller: Container ID: Image: gcr.io/kubernetes-helm/tiller:v2.8.1 Image ID: Ports: 44134/TCP, 44135/TCP State: Waiting Reason: ContainerCreating Ready: False Restart Count: 0 Liveness: http-get http://:44135/liveness delay=1s timeout=1s period=10s #success=1 #failure=3 Readiness: http-get http://:44135/readiness delay=1s timeout=1s period=10s #success=1 #failure=3 Volume Mounts: /var/run/secrets/kubernetes.io/serviceaccount from tiller-token-xng0h (ro) Environment Variables: TILLER_NAMESPACE: kube-system TILLER_HISTORY_MAX: 0 Conditions: Type Status Initialized True Ready False PodScheduled True Volumes: tiller-token-xng0h: Type: Secret (a volume populated by a Secret) SecretName: tiller-token-xng0h QoS Class: BestEffort Tolerations: <none> Events: FirstSeen LastSeen Count From SubObjectPath Type Reason Message --------- -------- ----- ---- ------------- -------- ------ ------- 1m 1m 1 {default-scheduler } Normal Scheduled Successfully assigned tiller-deploy-3018021184-dxpfj to k8s-node-1 1m 1m 1 {kubelet k8s-node-1} spec.containers{tiller} Normal Pulling pulling image "gcr.io/kubernetes-helm/tiller:v2.8.1"
發現需要gcr.io/kubernetes-helm/tiller:v2.8.1
一番折騰後執行後完成,因為找不到2.8.1版本,所以最後搞了個2.6.0版本
[[email protected] helm]# helm init --service-account tiller --upgrade -i index.tenxcloud.com/kubernetes-helm/tiller:v2.6.0 --skip-refresh 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. Happy Helming!
- 問題解決
先解決兩個錯誤:
- unable to do port forwarding: socat not found.
[[email protected] hello-svc]# helm version Client: &version.Version{SemVer:"v2.8.1", GitCommit:"6af75a8fd72e2aa18a2b278cfe5c7a1c5feca7f2", GitTreeState:"clean"} E0224 14:13:16.077226 7416 portforward.go:331] an error occurred forwarding 37271 -> 44134: error forwarding port 44134 to pod 76a7312e49220a229e443546a4b32d3e0406f09fd9b3646b3d30f6833e121375, uid : unable to do port forwarding: socat not found. Error: cannot connect to Tiller
解決辦法在node節點安裝socat
yum install socat
- 版本不一致
重新下載一致的版本包,和images的版本保持一致
5.專案中如何使用
-
針對每個專案形成一個chart,最後形成一個Chart Package
比如下面針對hello-svc這個基於tomcat的專案,先生成一個chart的結構
- 建立chart及部署
[[email protected] ~]# helm create hello-svc Creating hello-svc
按照我們自己的需求修改模板中的deployment.yaml,service.yaml和values.yaml檔案
[[email protected]master templates]# cat deployment.yaml apiVersion: extensions/v1beta1 kind: Deployment metadata: name: tomcatjmx spec: replicas: {{.Values.replicas}} template: metadata: labels: tomcat-app: "tomcatjmx" version: "1" spec: containers: - name: tomcatjmx image: tomcat:{{.Values.images.dockerTag}} ports: - containerPort: {{.Values.images.Port}} name: tomcatport - containerPort: 35135 name: jmx
[[email protected]master templates]# cat service.yaml apiVersion: v1 kind: Service metadata: name: {{.Values.service.name}} labels: tomcat-app: tomcatjmx spec: ports: - port: {{.Values.service.Port}} protocol: TCP targetPort: 8080 name: http - name: jmx protocol: TCP port: 35135 targetPort: {{.Values.service.targetPort}} type: NodePort selector: tomcat-app: tomcatjmx
[[email protected] hello-svc]# cat values.yaml # Default values for hello-svc. # This is a YAML-formatted file. # Declare variables to be passed into your templates. replicas: 1 images: dockerTag: jmxv4 Port: 8080 service: name: tomcatjmxsvc Port: 80 targetPort: 35135
相應的NOTES.txt也進行調整直到驗證沒有問題,驗證完成通過install安裝
helm install --dry-run --debug ./
[[email protected] hello-svc]# helm install ./ NAME: kindly-worm LAST DEPLOYED: Sat Feb 24 14:45:58 2018 NAMESPACE: default STATUS: DEPLOYED RESOURCES: ==> v1/Service NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE tomcatjmxsvc 10.254.25.181 <nodes> 80:32733/TCP,35135:30714/TCP 1s ==> v1beta1/Deployment NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE tomcatjmx 1 1 1 0 1s NOTES: 1. Get the application URL by running these commands: export POD_NAME=$(kubectl get pods -l "app=hello-svc,release=kindly-worm" -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 [[email protected]-master hello-svc]# helm list NAME REVISION UPDATED STATUS CHART NAMESPACE kindly-worm 1 Sat Feb 24 14:45:58 2018 DEPLOYED hello-svc-0.1.0 default
- 形成一個chart Package
打包形成一個tgz檔案,估計是每個專案一個chart,對應一個tgz
helm package ./
-
Chart Package的集中管理和存放
上面我們是從本地的目錄結構中的chart去進行部署,如果要集中管理chart,就需要涉及到repository的問題,因為helm repository都是指到外面的地址,接下來我們可以通過minio建立一個企業私有的存放倉庫。
Minio提供物件儲存服務。它的應用場景被設定在了非結構化的資料的儲存之上了。眾所周知,非結構化物件諸如影象/音訊/視訊/log檔案/系統備份/映象檔案…等等儲存起來管理總是不那麼方便,size變化很大,型別很多,再有云端的結合會使得情況更加複雜,minio就是解決此種場景的一個解決方案。Minio號稱其能很好的適應非結構化的資料,支援AWS的S3,非結構化的檔案從數KB到5TB都能很好的支援。
Minio的使用比較簡單,只有兩個檔案,服務端minio,客戶訪問端mc,比較簡單。
在專案中,我們可以直接找一臺虛擬機器作為Minio Server,提供服務,當然minio也支援作為Pod部署。
1.安裝配置Minio
下載
在https://dl.minio.io/client/mc/release/linux-amd64/ 下載客戶端程式mc和服務端程式minio
啟動minio服務
minio server ./repository
針對使用得客戶端加入security和token資訊
./mc config host add myminio http://192.168.44.108:9000 B0SW3MZ00J7OCG2JCG5D nZrG2olrz+aDbhbzVhft6JivkkoPQe2gp5JaG+XO
建立一個bucket同時設定許可權
mc mb myminio/minio-helm-repo
mc policy download myminio/minio-helm-repo
安裝完成後通過瀏覽器訪問minio的介面,http://192.168.44.108:9000/
2.將我們上面建立的chart Package傳入Minio的Repository
index.yaml為了讓helm對裡面的包進行索引,找到各種entry,每個entry是一個專案,每個專案對應一個chart Package.
在本地建立一個index.yaml,然後上傳,將來在使用的時候可以通過程式實現自動新增。
[[email protected] minio-helm-repo]# cat index.yaml apiVersion: v1 entries: hello-svc: - apiVersion: v1 description: Distributed object storage server built for cloud applications and devops. digest: 8440f6f064ed91a75194e77d4b2be99c491c1cb04fb34bca4a36a5be67e1ef2c name: hello-svc urls: - http://192.168.44.108:9000/minio-helm-repo/hello-svc-0.1.0.tgz version: 0.1.0
將之前的tgz package和index檔案都傳入。
./mc cp ./index.yaml myminio/minio-helm-repo ./index.yaml: 601 B / 601 B ┃▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓┃ 100.00% 47.73 KB/s 0s
./mc cp /root/hello-svc/hello-svc-0.1.0.tgz myminio/minio-helm-repo ...-svc-0.1.0.tgz: 1.50 KB / 1.50 KB ┃▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓┃ 100.00% 48.00 KB/s 0s
3.設定Helm
在helm中加入repository,加入完成後可以通過helm repo list進行羅列。修改了index.yaml後也需要用helm repo update進行更新。
[[email protected] helm]# helm repo add myrepo http://192.168.44.108:9000/minio-helm-repo "myrepo" has been added to your repositories
[[email protected]-master helm]# helm repo update Hang tight while we grab the latest from your chart repositories... ...Skip local chart repository ...Unable to get an update from the "stable" chart repository (https://kubernetes-charts.storage.googleapis.com): Get https://kubernetes-charts.storage.googleapis.com/index.yaml: dial tcp: lookup kubernetes-charts.storage.googleapis.com on [::1]:53: read udp [::1]:59458->[::1]:53: read: connection refused ...Successfully got an update from the "myrepo" chart repository Update Complete. ⎈ Happy Helming!⎈
-
基於Minio的Repository進行Helm的部署
好了,一切就緒,先search一下
[[email protected]master helm]# helm search hello WARNING: Repo "stable" is corrupt or missing. Try 'helm repo update'.NAME VERSION DESCRIPTION local/hello-svc 0.1.0 A Helm chart for Kubernetes myrepo/hello-svc 0.1.0 Distributed object storage server built for clo...
[[email protected]-master helm]# helm install myrepo/hello-svc NAME: quelling-hound LAST DEPLOYED: Sat Feb 24 17:14:23 2018 NAMESPACE: default STATUS: DEPLOYED RESOURCES: ==> v1/Service NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE tomcatjmxsvc 10.254.180.188 <nodes> 80:31790/TCP,35135:31132/TCP 2s ==> v1beta1/Deployment NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE tomcatjmx 1 1 1 0 2s NOTES: 1. Get the application URL by running these commands: export POD_NAME=$(kubectl get pods -l "app=hello-svc,release=quelling-hound" -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
這裡search能搜尋到但是部署不上去的問題折騰了一下,最後原因是那個Index.yaml檔案寫得有問題。再度更新後成功部署。
相關推薦
Helm安裝和專案使用
整體架構 1.為什麼要用? 首先在原來專案中都是基於yaml檔案來進行部署釋出的,而目前專案大部分微服務化或者模組化,會分成很多個元件來部署,每個元件可能對應一個deployment.yaml,一個service.yaml,一個Ingress.yaml還可能存在各種依賴關係,這樣一個專案如果有5個元件,很
vue的安裝和專案構建
第一種方法: 先安裝好note.js 第一步 :改淘寶映象 npm install -g cnpm --registry= https://registry.npm.ta
阿里雲伺服器的web專案釋出之路:(五)nodejs的安裝和專案部署詳細步驟
Nodejs如何部署在雲服務上 第一步:下載nodejs安裝包,並解壓壓縮包[解壓後預設在root下面] wget命令下載Node.js安裝包,該安裝包是編譯好的檔案,解壓之後,無需重複編 命令列:wget https://nodejs.org/dist/v6.
Ionic3安裝和專案建立
安裝前請注意各個版本的相容問題,以下版本親測可用。【安裝過程中注意網路必須暢通】 1. 請預先安裝好nodejs (官網:https://nodejs.org/en/) 【開啟命令列測試】 2. 安裝淘寶映象命令 npm install -g cnpm --r
kubernetes系列(十六) - Helm安裝和入門
- [1. helm簡介](#head1) - [1.1 為什麼需要helm](#head2) - [1.2 helm中幾個概念](#head3) - [1.3 helm用途](#head4) - [2. helm安裝](#head5) - [3. helm的基本使用](#head6) - [3.1
Kubernetes使用helm安裝Harbor管理image和chart
net 參考 work http png director reat 定義 下載失敗 Kubernetes使用helm安裝Harbor管理image和chart [TOC] 1. 環境說明 可用的kubernetes集群 可用的helm服務端、客戶端 可用的kubeapp
wordpress(1) —— 安裝和遷移原專案
一、環境安裝 二、如何遷移一個wordpress原專案 一、快速安裝wordpress 1 開始安裝WordPress之前你需要知道的東西 1.1 安裝WordPress你必須做的事情 2 著名的5分安裝 3&
CocoaPods -- ios專案中安裝和使用CocoaPods
CocoaPods是什麼? 當你開發iOS應用時,會經常使用到很多第三方開源類庫,比如JSONKit,AFNetWorking等等。可能某個類庫又用到其他類庫,所以要使用它,必須得另外下載其他類庫,而其他類庫又用到其他類庫,“子子孫孫無窮盡也”,這也許是比較特殊的情況。總之小編
nodejs解壓版安裝和配置(帶有搭建前端專案腳手架)
nodejs 安裝 我先前用了nvm,覺得nvm挺厲害可以隨時更換nodejs版本,但是研究了下,可能自己功力不夠還是什麼,並不好用,中間還出現了錯誤;所以最後還是解除安裝了; 本文圖文並茂的一步一步的來,旨在好用簡潔: 1】第一步:下載nodejs 中文官網: https://nodej
前端Vue框架(搭配Node伺服器和專案安裝指令)
Node參考下載地址:https://nodejs.org/zh-cn/download/ 參考安裝教程:https://www.runoob.com/nodejs/nodejs-install-setup.html開啟node指令面板後進行 安裝外掛: npm install -g vue-cli
MongoDB 的基本安裝和使用以及在 Django 專案中的運用
myMongoDB MongoDB的安裝和基本使用 環境 Python 3.6 Django 2.0.7 mongoengine 0.15.3 Mac Github 地址 https://githu
Redis 的安裝和基本使用以及在 Django 專案中的配置和使用
myRedis Redis的安裝好基本使用 環境 Python 3.6 Django 2.0.7 django-redis 4.9.0 Mac GitHub https://github.com/C
Docker環境安裝和在Tomcat中部署靜態專案和web專案
Docker 使用記錄 準備工作 linux伺服器一臺 ssh工具一個(主要用登入linux) 獲取該伺服器root許可權 耐心 環境搭建 登入伺服器 1. ssh -p 22 [email protected]
nginx安裝和簡單部署java web專案
1.Nginx (“engine x”) 是一個高效能的 HTTP 和 反向代理 伺服器,也是一個 IMAP/POP3/SMTP 代理伺服器。 Nginx特點是佔有記憶體少,併發能力強,事實上nginx的併發能力確實在同類型的網頁伺服器中表現較好。 Nginx由核心和模組組成,其中,核心的設
vue+django restful framework 電商專案(三) -- xadmin安裝和 商品資料的匯入
xadmin的安裝和配置詳見部落格:http://www.cnblogs.com/shhnwangjian/p/6372503.html 途中可能會遇到缺少什麼包, 用pip
React Native入門篇—第三步專案常用依賴包的安裝和配置
本人學習React Native沒有看過任何教學視訊,都是按照官網一步步學習的。只研究了Android開發,所以下面的教程都是Android開發教程。 注意:未經允許不可私自轉載,違者必究 React Native官方文件:https://reactnative.cn/docs
VUE專案中安裝和使用vant元件
Vant 是有贊前端團隊基於有贊統一的規範實現的 Vue 元件庫,提供了一整套 UI 基礎元件和業務元件。 特性 50+ 個經過有贊線上業務檢驗的元件 單元測試覆蓋率超過 90% 完善的中英文文件和示例 支援 TypeScript 支援 SSR 元件中文
github~安裝和IDEA同步專案使用
註冊與下載 安裝 一直點選下一步即可 cmd進到dos下 輸入git,出下下圖內容 安裝成功 IDEA配置git setting–》填寫安裝目錄的路徑,點選test,會顯示成功! GitHub填寫你在官網中註冊的使用者名稱和密碼。
Vant的安裝和配合引入Vue.js專案裡
1.安裝vantnpm i vant -S:這是簡寫形式。npm install vant --save:這是完整寫法。如果你網路很慢的話,可以使用淘寶的源,但是不建議使用cnpm來進行安裝。npm install vant--save--registry=https://r
安卓專案的目錄結構和專案安裝啟動過程描述
專案目錄說明: src:存放java程式的原始檔 gen:由開發工具自動生成的檔案。不是開發人員建立,工具自動建立。其中有一個R檔案,使用者等級各種資源的id,是由編譯器在編譯的時候指定的。R檔案會根據res下面各個資源的詳細情況進行一一描述,每一個資源都對應一個編號。R檔