HELM_DIST=“helm-OS-$ARCH.tar.gz”DOWNLOAD_URL=“https://get.helm.sh/$HELM_DIST”
CHECKSUM_URL=“$DOWNLOAD_URL.sha256”
HELM_TMP_ROOT=“$(mktemp -dt helm-installer-XXXXXX)”
HELM_TMP_FILE=“HELM_DIST”HELM_SUM_FILE=“HELM_DIST.sha256”echo “Downloading $DOWNLOAD_URL”
if [ “${HAS_CURL}” == “true” ]; then
curl -SsL “HELM_SUM_FILE”curl -SsL “HELM_TMP_FILE”elif [ “${HAS_WGET}” == “true” ]; then
wget -q -O “CHECKSUM_URL”wget -q -O “DOWNLOAD_URL”fi
}
#3: 检测上面的下载内容,如果检测不通过,就不让安装,所以得吧这判断删了
verifyChecksum() {
printf "Verifying checksum… "
local sum=$(openssl sha1 -sha256 ${HELM_TMP_FILE} | awk ‘{print $2}’)
local expected_sum=$(cat ${HELM_SUM_FILE})
if [ “expected_sum” ]; thenecho “SHA sum of ${HELM_TMP_FILE} does not match. Aborting.”
exit 1
fi
echo “Done.”
}
  • 修改后成这样【我这使用的是v3.2.1】

改成这样以后呢,就表示,使用这个版本

#1:指定当前版本

checkDesiredVersion() {
TAG=v3.2.1
}
#2:get文件和sha256文件需要在同一路径哈
downloadFile() {
HELM_DIST=“helm-OS-$ARCH.tar.gz”DOWNLOAD_URL=“https://get.helm.sh/$HELM_DIST”
CHECKSUM_URL=“$DOWNLOAD_URL.sha256”
HELM_TMP_ROOT=“$(mktemp -dt helm-installer-XXXXXX)”
HELM_TMP_FILE=“HELM_DIST”HELM_SUM_FILE=“HELM_DIST.sha256”echo “Downloading $DOWNLOAD_URL”
cp helm-v3.2.1* $HELM_TMP_ROOT
}
#3: 不让判断文件是否存在。
verifyChecksum() {
printf "Verifying checksum… "
local sum=$(openssl sha1 -sha256 ${HELM_TMP_FILE} | awk ‘{print $2}’)
local expected_sum=$(cat ${HELM_SUM_FILE})
echo “Done.”
}
• 上面3项修改完毕以后呢,保存退出,并给x权限,然后执行该脚本
[root@master helm]# chmod +x get
[root@master helm]# ./get
Downloading https://get.helm.sh/helm-v3.2.1-linux-amd64.tar.gz
Verifying checksum… Done.
Preparing to install helm into /usr/local/bin
helm installed into /usr/local/bin/helm
[root@master helm]#

执行安装并检测与卸载说明


  • 上面呢helm就装完了【此时是不能使用tab的】

我们查看下版本,能出现版本内容就算安装成功

[root@master helm]# helm version
version.BuildInfo{Version:“v3.2.1”, GitCommit:“fe51cd1e31e6a202cba7dead9552a6d418ded79a”, GitTreeState:“clean”, GoVersion:“go1.13.10”}
[root@master helm]#
• 上面安装的时候有提示将helm安装到这个路径
所以我们卸载呢就是删除掉该路径内容即可
helm installed into /usr/local/bin/helm
helm子命令使用teb操作

  • 方式1
前面我们的kubectl也是使用的 这种方式
[root@master helm]# cat /etc/profile | head -n 4
/etc/profile
source <(kubectl completion bash)
source <(helm completion bash) # 增加改行内容
[root@master helm]#
[root@master helm]# source /etc/profile
[root@master helm]#
[root@master helm]# hel
helm help
[root@master helm]# helm version
version.BuildInfo{Version:“v3.2.1”, GitCommit:“fe51cd1e31e6a202cba7dead9552a6d418ded79a”, GitTreeState:“clean”, GoVersion:“go1.13.10”}
[root@master helm]#
• 方式2
上面做了就不能再用这个方式了。知道就行
[root@vms10 ~]# helm completion bash > ~/.helmrc
[root@vms10 ~]# echo “source ~/.helmrc” >> ~/.bashrc
[root@vms10 ~]#
[root@vms10 ~]# source .bashrc
[root@vms10 ~]#
helm仓库管理

=======================================================================

  • 因为这个玩意需要外网才能使用,而我的集群是没有外网的,所以下面只放文档,不做实验,这个其实不难,如果下面理解有难度,可以自行百度查阅困惑内容的相关资料。

配置国内helm源


  • 查看现在使用的仓库:
[root@vms10 ~]# helm repo list
Error: no repositories to show
[root@vms10 ~]#
• 国内常用的仓库有:
  • 阿里云的源https://apphub.aliyuncs.com【建议用这个】
  • 微软azure 的源http://mirror.azure.cn/kubernetes/charts/
  • 添加仓库的语法:
helm repo add 名称地址
• 下面把阿里云的源和azure 的源都添加过来:
[root@vms10 ~]# helm repo add azure http://mirror.azure.cn/kubernetes/charts/
“azure” has been added to your repositories
[root@vms10 ~]#
• 这里是吧zaure 的源添加过来,命名为azure
[root@vms10 ~]# helm repo add ali https://apphub.aliyuncs.com
“ali” has been added to your repositories
[root@vms10 ~]#
• 这里是把阿里云的源添加过来,命名为ali
查看现在正在使用的源:
[root@vms10 ~]# helm repo list
NAME URL
azure http://mirror.azure.cn/kubernetes/charts/
ali https://apphub.aliyuncs.com
[root@vms10 ~]#
部署应用【部署chart】

查询应用对应的chart

  • 如果我们要部署哪个应用就到仓库里查询这个应用对应的chart,假设我要部署redis
[root@vms10 ~]# mkdir helm
[root@vms10 ~]# cd helm/
[root@vms10 ~]#
[root@vms10 helm]# helm search repo redis
NAME CHART VERSION APP VERSION
DESCRIPTION
ali/prometheus-redis-exporter 3.2.2 1.3.4 Prometheus exporter
for Redis metrics
ali/redis 10.5.3 5.0.7 Open source,
…
azure/redis 10.5.7 5.0.7 DEPRECATED
[root@vms10 helm]#

部署MySQL为例

  • 下面开始部署MySQL

切换到ns5 命名空间进行操作

[root@vms10 helm]# kubectl create ns ns5
namespace/ns5 created
[root@vms10 helm]# kubens ns5
Context “kubernetes-admin@kubernetes” modified.
Active namespace is “ns5”.
[root@vms10 helm]#
  • 下面开始部署MySQL

通过helm pull 单独把chart 下载下来,如下:

[root@vms10 helm]# helm pull azure/mysql

[root@vms10 helm]# ls

mysql-1.6.4.tgz

[root@vms10 helm]#

  • 解压并进入到MySQL 目录,会有这么几个文件:
  • Chart.yaml 是chart 的描述信息
  • README.md 是此chart 的帮助信息
  • templates 目录里是各种模板,比如定义svc,定义pvc 等
  • values.yaml里记录的是chart 的各种信息,比如镜像是什么,root 密码是什么,是否使用持久性存储等

[root@vms10 helm]# cd mysql/

[root@vms10 mysql]# ls

Chart.yaml README.md templates values.yaml

[root@vms10 mysql]#

  • 编辑values.yaml 并按照如下修改

指定自己要使用的镜像,按如下修改【其实就是些创建pod规则,有很多内容,不需要的选项可以注释掉,具体哪些不需要,不同应用有不同的规则。】

OVN Kubernetes Helm仓库 helm仓库搭建_kubernetes

  • 指定MySQL 的root 密码,注意这里前面不能留有空格:

OVN Kubernetes Helm仓库 helm仓库搭建_java_02

  • 如果要创建普通用户和密码,就修改如下两行,这里我们没有指定

OVN Kubernetes Helm仓库 helm仓库搭建_java_03

  • 是否要使用持久性存储,如果不使用的话就把enabled 的值改成false:

OVN Kubernetes Helm仓库 helm仓库搭建_数据库_04

注意:可以用vim 编辑器搜索persistence。

  • 关于values.yaml 的其他部分保持默认值即可,保存退出

安装&删除mysql

  • 安装应用的命令为helm install 名字chart 目录

在当前目录里执行安装操作:

[root@vms10 mysql]# helm install db . #最后的点,表示当前目录
NAME: db
LAST DEPLOYED: Tue Jun 9 13:05:58 2020
NAMESPACE: ns5
STATUS: deployed
…大量输出…
Execute the following command to route the connection:
kubectl port-forward svc/db-mysql 3306
mysql -h {MYSQL_PORT} -u root -p${MYSQL_ROOT_PASSWORD}[root@vms10 mysql]#
• 查看现在已经部署的release 及pod
[root@vms10 mysql]# helm ls
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
db ns5 1 2020-06-0…T deployed mysql-1.6.4 5.7.30
[root@vms10 mysql]#
[root@vms10 mysql]# kubectl get pods
NAME READY STATUS RESTARTS AGE
db-mysql-84f68ddfdc-m6xgq 1/1 Running 0 92s
[root@vms10 mysql]#
• 安装mariadb 客户端:
[root@vms10 mysql]# yum install mariadb -y
…输出…
作为依赖被升级:
mariadb-libs.x86_64 1:5.5.65-1.el7
完毕!
[root@vms10 mysql]#
• 查看mysql pod 的IP:
[root@vms10 mysql]# kubectl get pods -o wide --no-headers
db-mysql-84f68ddfdc-m6xgq 1/1 Running 0 3m18s 10.244.14.41 …
[root@vms10 mysql]#
• 用mysql 命令连接到此pod 上:
[root@vms10 mysql]# mysql -uroot -predhat -h10.244.14.41
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 48.
…输出…
MySQL [(none)]> quit
Bye
[root@vms10 mysql]#
• 删除此release
[root@vms10 mysql]# helm delete db
release “db” uninstalled
[root@vms10 mysql]# helm ls
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
[root@vms10 mysql]#
搭建私有仓库
====================

=================================================

pod创建【node节点操作】


  • 我们用nginx做测试【注意,这是在node节点操作的 】

首先需要确保本地80端口没有被占用,如果被占用,则先吧httpd服务停了【具体方法看下面占用解决方法】

  • 在vms12 上用nginx 镜像创建一个容器,名字为c1
[root@vms12 ~]# docker run -dit --name=c1 -p 8080:80 -v /data:/usr/share/nginx/html/charts
docker.io/nginx
ca08a2ce9b8e910ed71f458fa3c7dd53843bf50e5bb92c089fdacf7cd65a1657
[root@vms12 ~]#