一、下载helm安装脚本

1.1 介绍

  • Helm是Kubernetes的包管理器。
  • 其实就是管理了一推配置文件,ds,configmap,deployment......,一类规则。

就类似:

  1. yum是centos的包管理器。
  2. apt-get是ubuntu的包管理器。
  3. pip是python的包管理器。
  4. npm是nodejs的包管理器。

1.2 下载helm安装脚本

  1. # 这样下载的都是master 最新版的。
  2. curl https://raw.githubusercontent.com/helm/helm/master/scripts/get > get_helm.sh
  3. # 我这下载的是v2.17.0版本的
  4. curl https://raw.githubusercontent.com/helm/helm/v2.17.0/scripts/get > get_helm.sh

1.3 安装helm客户端

  1. # 正常是执行安装脚本就行,脚本会帮你去下载安装包,并且安装。
  2. bash get_helm.sh

注:由于国内网络原因,下载helm安装包时会失败,所以我已经把安装包下载到本地,并修改了安装脚本。安装包和安装脚本都放同级目录下。

安装包:链接: https://pan.baidu.com/s/1fmhhSE3zAO2bNdlvV38KMA  密码: acdv

安装脚本:猛击这里

查看代码

  1. #!/usr/bin/env bash
  2. # Copyright The Helm Authors.
  3. #
  4. # Licensed under the Apache License, Version 2.0 (the "License");
  5. # you may not use this file except in compliance with the License.
  6. # You may obtain a copy of the License at
  7. #
  8. # http://www.apache.org/licenses/LICENSE-2.0
  9. #
  10. # Unless required by applicable law or agreed to in writing, software
  11. # distributed under the License is distributed on an "AS IS" BASIS,
  12. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. # See the License for the specific language governing permissions and
  14. # limitations under the License.
  15. # The install script is based off of the MIT-licensed script from glide,
  16. # the package manager for Go: https://github.com/Masterminds/glide.sh/blob/master/get
  17. PROJECT_NAME="helm"
  18. TILLER_NAME="tiller"
  19. : ${USE_SUDO:="true"}
  20. : ${HELM_INSTALL_DIR:="/usr/local/bin"}
  21. # initArch discovers the architecture for this system.
  22. initArch() {
  23. ARCH=$(uname -m)
  24. case $ARCH in
  25. armv5*) ARCH="armv5";;
  26. armv6*) ARCH="armv6";;
  27. armv7*) ARCH="arm";;
  28. aarch64) ARCH="arm64";;
  29. x86) ARCH="386";;
  30. x86_64) ARCH="amd64";;
  31. i686) ARCH="386";;
  32. i386) ARCH="386";;
  33. esac
  34. }
  35. # initOS discovers the operating system for this system.
  36. initOS() {
  37. OS=$(echo `uname`|tr '[:upper:]' '[:lower:]')
  38. case "$OS" in
  39. # Minimalist GNU for Windows
  40. mingw*) OS='windows';;
  41. esac
  42. }
  43. # runs the given command as root (detects if we are root already)
  44. runAsRoot() {
  45. if [ $EUID -ne 0 -a "$USE_SUDO" = "true" ]; then
  46. sudo "${@}"
  47. else
  48. "${@}"
  49. fi
  50. }
  51. # verifySupported checks that the os/arch combination is supported for
  52. # binary builds.
  53. verifySupported() {
  54. local supported="darwin-amd64\nlinux-386\nlinux-amd64\nlinux-arm\nlinux-arm64\nlinux-ppc64le\nlinux-s390x\nwindows-amd64"
  55. if ! echo "${supported}" | grep -q "${OS}-${ARCH}"; then
  56. echo "No prebuilt binary for ${OS}-${ARCH}."
  57. echo "To build from source, go to https://github.com/helm/helm"
  58. exit 1
  59. fi
  60. if ! type "curl" > /dev/null && ! type "wget" > /dev/null; then
  61. echo "Either curl or wget is required"
  62. exit 1
  63. fi
  64. }
  65. # checkDesiredVersion checks if the desired version is available.
  66. checkDesiredVersion() {
  67. if [ "x$DESIRED_VERSION" == "x" ]; then
  68. # Pinning tag to v2.17.0 as per https://github.com/helm/helm/issues/9607
  69. TAG=v2.17.0
  70. else
  71. TAG=$DESIRED_VERSION
  72. fi
  73. }
  74. # checkHelmInstalledVersion checks which version of helm is installed and
  75. # if it needs to be changed.
  76. checkHelmInstalledVersion() {
  77. if [[ -f "${HELM_INSTALL_DIR}/${PROJECT_NAME}" ]]; then
  78. local version=$("${HELM_INSTALL_DIR}/${PROJECT_NAME}" version -c | grep '^Client' | cut -d'"' -f2)
  79. if [[ "$version" == "$TAG" ]]; then
  80. echo "Helm ${version} is already ${DESIRED_VERSION:-latest}"
  81. return 0
  82. else
  83. echo "Helm ${TAG} is available. Changing from version ${version}."
  84. return 1
  85. fi
  86. else
  87. return 1
  88. fi
  89. }
  90. # downloadFile downloads the latest binary package and also the checksum
  91. # for that binary.
  92. downloadFile() {
  93. HELM_DIST="helm-$TAG-$OS-$ARCH.tar.gz"
  94. DOWNLOAD_URL="https://get.helm.sh/$HELM_DIST"
  95. CHECKSUM_URL="$DOWNLOAD_URL.sha256"
  96. HELM_TMP_ROOT="$(mktemp -dt helm-installer-XXXXXX)"
  97. HELM_TMP_FILE="$HELM_TMP_ROOT/$HELM_DIST"
  98. HELM_SUM_FILE="$HELM_TMP_ROOT/$HELM_DIST.sha256"
  99. echo "Downloading $DOWNLOAD_URL"
  100. if type "curl" > /dev/null; then
  101. curl -SsL "$CHECKSUM_URL" -o "$HELM_SUM_FILE"
  102. elif type "wget" > /dev/null; then
  103. wget -q -O "$HELM_SUM_FILE" "$CHECKSUM_URL"
  104. fi
  105. if type "curl" > /dev/null; then
  106. #curl -SsL "$DOWNLOAD_URL" -o "$HELM_TMP_FILE"
  107. cp -rf ./helm-v2.17.0-linux-amd64.tar.gz $HELM_TMP_FILE # 就修改了这个地方 让脚本直接复制的本地包。
  108. elif type "wget" > /dev/null; then
  109. wget -q -O "$HELM_TMP_FILE" "$DOWNLOAD_URL"
  110. fi
  111. }
  112. # installFile verifies the SHA256 for the file, then unpacks and
  113. # installs it.
  114. installFile() {
  115. HELM_TMP="$HELM_TMP_ROOT/$PROJECT_NAME"
  116. local sum=$(openssl sha1 -sha256 ${HELM_TMP_FILE} | awk '{print $2}')
  117. local expected_sum=$(cat ${HELM_SUM_FILE})
  118. if [ "$sum" != "$expected_sum" ]; then
  119. echo "SHA sum of ${HELM_TMP_FILE} does not match. Aborting."
  120. exit 1
  121. fi
  122. mkdir -p "$HELM_TMP"
  123. tar xf "$HELM_TMP_FILE" -C "$HELM_TMP"
  124. HELM_TMP_BIN="$HELM_TMP/$OS-$ARCH/$PROJECT_NAME"
  125. TILLER_TMP_BIN="$HELM_TMP/$OS-$ARCH/$TILLER_NAME"
  126. echo "Preparing to install $PROJECT_NAME and $TILLER_NAME into ${HELM_INSTALL_DIR}"
  127. runAsRoot cp "$HELM_TMP_BIN" "$HELM_INSTALL_DIR"
  128. echo "$PROJECT_NAME installed into $HELM_INSTALL_DIR/$PROJECT_NAME"
  129. if [ -x "$TILLER_TMP_BIN" ]; then
  130. runAsRoot cp "$TILLER_TMP_BIN" "$HELM_INSTALL_DIR"
  131. echo "$TILLER_NAME installed into $HELM_INSTALL_DIR/$TILLER_NAME"
  132. else
  133. echo "info: $TILLER_NAME binary was not found in this release; skipping $TILLER_NAME installation"
  134. fi
  135. }
  136. # fail_trap is executed if an error occurs.
  137. fail_trap() {
  138. result=$?
  139. if [ "$result" != "0" ]; then
  140. if [[ -n "$INPUT_ARGUMENTS" ]]; then
  141. echo "Failed to install $PROJECT_NAME with the arguments provided: $INPUT_ARGUMENTS"
  142. help
  143. else
  144. echo "Failed to install $PROJECT_NAME"
  145. fi
  146. echo -e "\tFor support, go to https://github.com/helm/helm."
  147. fi
  148. cleanup
  149. exit $result
  150. }
  151. # testVersion tests the installed client to make sure it is working.
  152. testVersion() {
  153. set +e
  154. HELM="$(command -v $PROJECT_NAME)"
  155. if [ "$?" = "1" ]; then
  156. echo "$PROJECT_NAME not found. Is $HELM_INSTALL_DIR on your "'$PATH?'
  157. exit 1
  158. fi
  159. set -e
  160. echo "Run '$PROJECT_NAME init' to configure $PROJECT_NAME."
  161. }
  162. # help provides possible cli installation arguments
  163. help () {
  164. echo "Accepted cli arguments are:"
  165. echo -e "\t[--help|-h ] ->> prints this help"
  166. echo -e "\t[--version|-v <desired_version>]"
  167. echo -e "\te.g. --version v2.4.0 or -v latest"
  168. echo -e "\t[--no-sudo] ->> install without sudo"
  169. }
  170. # cleanup temporary files to avoid https://github.com/helm/helm/issues/2977
  171. cleanup() {
  172. if [[ -d "${HELM_TMP_ROOT:-}" ]]; then
  173. rm -rf "$HELM_TMP_ROOT"
  174. fi
  175. }
  176. # Execution
  177. #Stop execution on any error
  178. trap "fail_trap" EXIT
  179. set -e
  180. # Parsing input arguments (if any)
  181. export INPUT_ARGUMENTS="${@}"
  182. set -u
  183. while [[ $# -gt 0 ]]; do
  184. case $1 in
  185. '--version'|-v)
  186. shift
  187. if [[ $# -ne 0 ]]; then
  188. export DESIRED_VERSION="${1}"
  189. else
  190. echo -e "Please provide the desired version. e.g. --version v2.4.0 or -v latest"
  191. exit 0
  192. fi
  193. ;;
  194. '--no-sudo')
  195. USE_SUDO="false"
  196. ;;
  197. '--help'|-h)
  198. help
  199. exit 0
  200. ;;
  201. *) exit 1
  202. ;;
  203. esac
  204. shift
  205. done
  206. set +u
  207. initArch
  208. initOS
  209. verifySupported
  210. checkDesiredVersion
  211. if ! checkHelmInstalledVersion; then
  212. downloadFile
  213. installFile
  214. fi
  215. testVersion
  216. cleanup

二、安装tiller

说白了就是接收到helm发送的请求,然后根据一系类 的配置文件生成k8s的部署文件(yaml文件),然后提交给k8s。

2.1 安装socat

socat是解决helm连接不上tiller问题。一个通信的问题。

报错如下:

  1. [root@k8s-master hello-svc]# helm version
  2. Client: &version.Version{SemVer:"v2.17.0", GitCommit:"6af75a8fd72e2aa18a2b278cfe5c7a1c5feca7f2", GitTreeState:"clean"}
  3. 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.
  4. Error: cannot connect to Tiller

解决:安装一下这个包就行

  1. yum -y install socat
  2. ###########
  3. apt-get -y install socat

2.2 创建tiller rbac授权

首先tiller想要把配置文件提交给k8s,那么它肯定需要权限才行。

所以这一步就是给tiller权限。

  1. # 一个sa,然后把sa绑定给admin角色。这样这个sa就有集群的admin 所有权限。然后tiller使用这个sa就行。
  2. kubectl create -f heml-rbac.yaml
  3. apiVersion: v1
  4. kind: ServiceAccount
  5. metadata:
  6. name: tiller
  7. namespace: kube-system
  8. ---
  9. apiVersion: rbac.authorization.k8s.io/v1
  10. kind: ClusterRoleBinding
  11. metadata:
  12. name: tiller
  13. roleRef:
  14. apiGroup: rbac.authorization.k8s.io
  15. kind: ClusterRole
  16. name: cluster-admin
  17. subjects:
  18. - kind: ServiceAccount
  19. name: tiller
  20. namespace: kube-system

传送门:k8s  rbac权限随笔

2.3 初始化helm

其实就是在k8s起了一个tiller pod。

  1. # 使用的镜像要和helm版本一样
  2. # stable-repo-url 是仓库地址,就是类似于yum仓库的源。
  3. # service-account 指定上面创建的sa
  4. # --history-max 设置最大历史记录,大限制清除,如果没有设置最大历史记录,则无限期地保留历史记录.
  5. helm init --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.17.0 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts --service-account=tiller --history-max 50

2.4 验证

  1. # 这样就是安装成功了
  2. [root@zm-qa-k8s40 v2.0]# helm version
  3. Client: &version.Version{SemVer:"v2.17.0", GitCommit:"a690bad98af45b015bd3da1a41f6218b1a451dbe", GitTreeState:"clean"}
  4. Server: &version.Version{SemVer:"v2.17.0", GitCommit:"a690bad98af45b015bd3da1a41f6218b1a451dbe", GitTreeState:"clean"}

三、常用命令

  1. # 查看版本
  2. helm version
  3. # 查看当前安装的charts
  4. helm list
  5. # 查询 charts
  6. helm search [release_name]
  7. # 安装charts
  8. helm install --name redis --namespaces prod bitnami/redis
  9. # 查看charts状态
  10. helm status [release_name]
  11. # 删除charts
  12. helm delete --purge [release_name]
  13. # 增加repo
  14. helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
  15. helm repo add --username admin --password password myharbor https://xxx.ooo.com
  16. # 更新repo仓库资源
  17. helm repo update
  18. # 创建charts
  19. helm create helm_charts
  20. # 测试charts语法
  21. helm lint
  22. # 打包charts
  23. cd helm_charts && helm package ./
  24. #查看生成的yaml文件
  25. helm template helm_charts-0.1.1.tgz
  26. # 更新image
  27. helm upgrade --set image.tag='v2021-12-22-10-48-40' study-api-en-oral myharbor/study-api-en-oral
  28. # 回滚relase
  29. helm hist study-api-en-oral
  30. helm rollback study-api-en-oral 4
  31. #升级版本
  32. helm upgrade [release_name] .
  33. helm upgrade -f values.yaml [release_name] .
  34. helm upgrade [release_name] --set image.tag='latest'

一定成功 k8s 安装helm v2.17 基本命令的更多相关文章

  1. k8s安装helm

    1.客户端安装 A.直接在github上下载二进制文件进行解压,下载地址:https://github.com/kubernetes/helm/releases B.将解压出来的二进制文件helm 拷 ...

  2. [转帖]Kubernetes中安装Helm及使用

    Kubernetes中安装Helm及使用 2018年07月02日 17:41:09 灬勿忘丶心安 阅读数 3699更多 分类专栏: K8S   版权声明:本文为博主原创文章,遵循CC 4.0 BY-S ...

  3. K8S安装Kubesphere

    准备工作 安装Helm curl -L https://git.io/get_helm.sh | bash 创建账户 cat > heml-rbac.yaml << EOF apiV ...

  4. Kubernetes K8S之Helm部署、使用与示例

    Kubernetes K8S之Helm部署.使用.常见操作与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2 ...

  5. k8s学习-Helm

    4.9.Helm 4.9.1.简单使用 概念 文档:https://github.com/helm/helm/blob/master/docs/charts.md 阿里云apphub:https:// ...

  6. 小白学k8s(7)helm[v3]使用了解

    helm使用 什么是helm 安装helm Helm V2 & V3 架构设计 配置kube config helm使用 添加仓库 helm安装nginx helm的核心概念 Chart Co ...

  7. K8S 安装 Wordpress

    基本概念 Helm 可以理解为 Kubernetes 的包管理工具,可以方便地发现.共享和使用为Kubernetes构建的应用,它包含几个基本概念 Helm是目前Kubernetes服务编排领域的唯一 ...

  8. [转帖]Helm V2 迁移到 V3 版本

    Helm V2 迁移到 V3 版本 -- :: Mr-Liuqx 阅读数 63更多 分类专栏: kubernetes 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上 ...

  9. k8s结合helm部署

    一.安装Helm helm教程以及安装可以参考这篇文章 二.Heml说明 常见的helm模板如下 myapp - chart 包目录名 ├── charts - 依赖的子包目录,里面可以包含多个依赖的 ...

随机推荐

  1. html+css第八篇滑动门和可爱的css精灵

    滑动门: 滑动门并不是一项全新的技术,它是利用背景图像的可层叠性,并允许他们在彼此之上进行滑动,以创造一些特殊的效果. CSS精灵 CSS Sprites在国内很多人叫CSS精灵,是一种网页图片应用处 ...

  2. ABC 210

    A 按题意模拟. scanf("%lld%lld%lld%lld",&n,&a,&x,&y); std::cout<<n * x - ( ...

  3. Codeforces 772D - Varying Kibibits(高维差分+二项式定理维护 k 次方和)

    Codeforces 题目传送门 & 洛谷题目传送门 首先很容易注意到一件事,那就是对于所有 \(f(S)\) 可能成为 \(x\) 的集合 \(S\),必定有 \(\forall y\in ...

  4. 【Python小试】去除核酸特定长度的接头序列

    输入 input.txt ATTCGATTATAAGCTCGATCGATCGATCGATCGATCGATCGATCGATCGATCGATC ATTCGATTATAAGCACTGATCGATCGATCG ...

  5. Python——MacBook Pro中安装pip

    1.系统已有python2和python3,如何检查MacBook Pro系统是否安装的有pip? 看到terminal的提示没有,有提示pip的,下面的提示,说明pip安装了. 要查看pip3是否安 ...

  6. DRF请求流程及主要模块分析

    目录 Django中CBV请求生命周期 drf前期准备 1. 在views.py中视图类继承drf的APIView类 2. drf的as_view()方法 drf主要模块分析 1. 请求模块 2. 渲 ...

  7. 14-Reverse Integer

    思路: 先判定符号,整型范围[-2^32,2^32] 取余除10操作,依次进行,越界返回0 Reverse digits of an integer. Example1: x = 123, retur ...

  8. Java 读取txt文件生成Word文档

    本文将以Java程序代码为例介绍如何读取txt文件中的内容,生成Word文档.在编辑代码前,可参考如下代码环境进行配置: IntelliJ IDEA Free Spire.Doc for Java T ...

  9. 商业爬虫学习笔记day1

    day1 一. HTTP 1.介绍: https://www.cnblogs.com/vamei/archive/2013/05/11/3069788.html http://blog.csdn.ne ...

  10. Oracle中常用的系统表

    1.dba开头的表 dba_users 数据库用户信息 dba_segments 表段信息 dba_extents 数据区信息 dba_objects 数据库对象信息 dba_tablespaces ...