文章目录

目录

在没使用 Helm之前,向 K8S部署应用,我们要依次部署 deploymentsvc 等,步骤较繁琐。况且随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂, Helm通过打包的方式,支持发布的版本管理和控制,很大程度上简化了 K8S应用的部署和管理

一、Helm 简介

Helm本质就是让 K8S的应用管理( DeploymentService等 ) 可配置,能动态生成。通过动态生成 K8S资源清单文件( deployment.yamlservice.yaml)。然后调用 Kubectl自动执行 K8S资源部署。

Helm是官方提供的类似于 YUM的包管理器,是部署环境的流程封装。 Helm有两个重要的概念: chartrelease

  • chart是创建一个应用的信息集合,包括各种 Kubernetes对象的配置模板、参数定义、依赖关系、文档说明等。 chart是应用部署的自包含逻辑单元。可以将 chart想象成 aptyum中的软件安装包
  • releasechart的运行实例,代表了一个正在运行的应用。当 chart被安装到 Kubernetes集群,就生成一个 releasechart能够多次安装到同一个集群,每次安装都是一个 release

Helm包含两个组件: Helm客户端和 Tiller服务器,如下图所示:

Helm客户端负责 chartrelease的创建和管理以及和 Tiller的交互。 Tiller服务器运行在 K8S集群中,它会处理 Helm客户端的请求,与 Kubernetes API Server交互

二、Helm 部署

下载 helm客户端:

[root@master helm]

[root@master helm]

由于 api server开启了 RBAC访问控制,所以需要创建 tiller使用的 service account,并分配合适的角色给它,这样才能访问 api server,详细内容可以查看 helm文档中的 Role-based Access Control。这里简单起见直接分配 cluster- admin这个集群内置的 ClusterRole给它,创建 rbac-config.yaml文件:

[root@master helm]
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 [root@master helm] [root@worker1 ~] [root@master helm] [root@master helm]
tiller-deploy-6d47785b7c-jbdv7 1/1 Running 0 1h [root@master helm]
Client: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}

三、Helm 自定义模板

[root@master helm]

[root@master hello-world]
name: hello-world
version: 1.0.0 [root@master templates] [root@master templates]
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: hello-world
spec:
replicas: 1
template:
metadata:
labels:
app: hello-world
spec:
containers:
- name: hello-world
image: hub.hc.com/library/myapp:v1
ports:
- containerPort: 80
protocol: TCP [root@master templates]
apiVersion: v1
kind: Service
metadata:
name: hello-world
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
protocol: TCP
selector:
app: hello-world [root@master hello-world] [root@master hello-world]
NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
dunking-manta 2 Tue Aug 18 10:04:27 2020 DEPLOYED hello-world-1.0.0 default [root@master templates] [root@master templates] [root@master templates]
NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
dunking-manta 2 Tue Aug 18 10:04:27 2020 DELETED hello-world-1.0.0 default [root@master templates]
REVISION UPDATED STATUS CHART DESCRIPTION
1 Tue Aug 18 09:49:45 2020 SUPERSEDED hello-world-1.0.0 Install complete
2 Tue Aug 18 10:04:27 2020 SUPERSEDED hello-world-1.0.0 Deletion complete [root@master templates] [root@master templates]

动态切换版本:

[root@master hello-world]
image:
repository: wangyanglinux/myapp
tag: 'v2'

[root@master ~]
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a> [root@master hello-world] [root@master ~]
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a> [root@master ~] [root@master ~]
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>

Debug


[root@master ~]

四、使用Helm部署dashboard


[root@worker1 ~]
fbdfe08b001c: Loading layer 122.3MB/122.3MB
Loaded image: k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1 [root@master Dashboard]
[root@master Dashboard]
[root@master Dashboard]
[root@master Dashboard]
NAME URL
local http://127.0.0.1:8879/charts
stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts [root@master Dashboard]
[root@master Dashboard]
[root@master kubernetes-dashboard]
image:
repository: k8s.gcr.io/kubernetes-dashboard-amd64
tag: v1.10.1
ingress:
enabled: true
hosts:
- k8s.frognew.com
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
tls:
- secretName: frognew-com-tls-secret
hosts:
- k8s.frognew.com
rbac:
clusterAdminRole: true [root@master kubernetes-dashboard]
> -n kubernetes-dashboard \
> --namespace kube-system \
> -f k8s-dashboard.yaml [root@master kubernetes-dashboard]
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes-dashboard ClusterIP 10.105.124.175 <none> 443/TCP 3m39s [root@master kubernetes-dashboard] [root@master kubernetes-dashboard]
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes-dashboard NodePort 10.105.124.175 <none> 443:30186/TCP 9m5s

五、使用dashboard部署应用

使用火狐浏览器访问 https://192.168.182.100:30186,选择令牌并输入下方查到的 token



查询 dashboard-token

[root@master kubernetes-dashboard]
kubernetes-dashboard-token-5lgp8 kubernetes.io/service-account-token 3 27m [root@master kubernetes-dashboard]

进入到 dashboard面板后,点击创建应用:



创建应用的参数如下,点击部署



容器部署成功:

微信搜一搜 : 全栈小刘 ,获取文章 pdf 版本

最新文章

  1. Mysql 命令大全
  2. Angular.JS + Require.JS + angular-async-loader 来实现异步加载 angular 模块
  3. lecture10-模型的结合与全贝叶斯学习
  4. 站点发布到 IIS 后,System.Data.SqlLite.dll 末找到
  5. C/C++中内存区域划分大总结
  6. 【python】【转】Python生成随机数的方法
  7. css单位和值
  8. [翻译]在Django项目中添加谷歌统计(Google Analytics)
  9. 第二章 ArrayList源码解析
  10. JS的string操作
  11. day 7 -1 进程理论知识
  12. iptables(4)规则编写
  13. vmware常用命令
  14. python之GIL release (I/O open(file) socket time.sleep)
  15. Python—字符编码转换、函数基本操作
  16. jq demo 简单的图片懒加载效果
  17. [BZOJ2238]Mst
  18. PKM(个人知识管理)类软件收集(偶尔更新列表)
  19. computer、methods和watch
  20. oracle 使用绑定变量极大的提升性能

热门文章

  1. redis启动报错Could not connect to Redis at 127.0.0.1:6379: 由于目标计算机积极拒绝,无法连接。
  2. SpringBoot整合Elasticsearch7
  3. C语言讲义——errno
  4. python sklearn库实现逻辑回归的实例代码
  5. 记一次Ddos遭遇
  6. 010 editor的使用
  7. 一万字详解 Redis Cluster Gossip 协议
  8. 【GDOI2007】JZOJ2020年8月10日提高组T1 夏娜的菠萝包
  9. Cys_Control(二) MButton
  10. .NET Core/.NET 5.0 析构函数依然有效?