Helm 带你飞
文章目录
在没使用
Helm
之前,向K8S
部署应用,我们要依次部署deployment
、svc
等,步骤较繁琐。况且随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂,Helm
通过打包的方式,支持发布的版本管理和控制,很大程度上简化了K8S
应用的部署和管理
一、Helm 简介
Helm
本质就是让 K8S
的应用管理( Deployment
、 Service
等 ) 可配置,能动态生成。通过动态生成 K8S
资源清单文件( deployment.yaml
, service.yaml
)。然后调用 Kubectl
自动执行 K8S
资源部署。
Helm
是官方提供的类似于 YUM
的包管理器,是部署环境的流程封装。 Helm
有两个重要的概念: chart
和 release
:
chart
是创建一个应用的信息集合,包括各种Kubernetes
对象的配置模板、参数定义、依赖关系、文档说明等。chart
是应用部署的自包含逻辑单元。可以将chart
想象成apt
、yum
中的软件安装包release
是chart
的运行实例,代表了一个正在运行的应用。当chart
被安装到Kubernetes
集群,就生成一个release
。chart
能够多次安装到同一个集群,每次安装都是一个release
。
Helm
包含两个组件: Helm
客户端和 Tiller
服务器,如下图所示:
Helm
客户端负责 chart
和 release
的创建和管理以及和 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 版本
Helm 带你飞的更多相关文章
- 【算法系列学习三】[kuangbin带你飞]专题二 搜索进阶 之 A-Eight 反向bfs打表和康拓展开
[kuangbin带你飞]专题二 搜索进阶 之 A-Eight 这是一道经典的八数码问题.首先,简单介绍一下八数码问题: 八数码问题也称为九宫问题.在3×3的棋盘,摆有八个棋子,每个棋子上标有1至8的 ...
- 华为CloudIDE免费公测,带你出坑带你飞
你的代码仓库上线了吗?是不是有时候遇到这样的问题? 只想浏览一下代码,却发现线上浏览效果不佳,高亮显示什么的都没有.而在桌面端浏览要需要先同步代码,再用桌面端的IDE打开.尤其是使用git的时候,先要 ...
- ★10 个实用技巧,让Finder带你飞~
10 个实用技巧,让 Finder 带你飞 Finder 是 Mac 电脑的系统程序,有的功能类似 Windows 的资源管理器.它是我们打开 Mac 首先见到的「笑脸」,有了它,我们可以组织和使用 ...
- ★10 个实用技巧,让Finder带你飞~
10 个实用技巧,让 Finder 带你飞 Finder 是 Mac 电脑的系统程序,有的功能类似 Windows 的资源管理器.它是我们打开 Mac 首先见到的「笑脸」,有了它,我们可以组织和使用 ...
- KUANGBIN带你飞
KUANGBIN带你飞 全专题整理 https://www.cnblogs.com/slzk/articles/7402292.html 专题一 简单搜索 POJ 1321 棋盘问题 //201 ...
- Tarjan 联通图 Kuangbin 带你飞 联通图题目及部分联通图题目
Tarjan算法就不说了 想学看这 https://www.byvoid.com/blog/scc-tarjan/ https://www.byvoid.com/blog/biconnect/ 下面是 ...
- 「kuangbin带你飞」专题十四 数论基础
layout: post title: 「kuangbin带你飞」专题十四 数论基础 author: "luowentaoaa" catalog: true tags: mathj ...
- 「kuangbin带你飞」专题二十 斜率DP
layout: post title: 「kuangbin带你飞」专题二十 斜率DP author: "luowentaoaa" catalog: true tags: mathj ...
- 「kuangbin带你飞」专题二十二 区间DP
layout: post title: 「kuangbin带你飞」专题二十二 区间DP author: "luowentaoaa" catalog: true tags: - ku ...
随机推荐
- guitar pro系列教程(二):Guitar Pro主界面之记谱功能的详细解析【下】
本章节我们接着上一章节继续讲解关于guitar pro主界面的记谱功能里的符号功能.有兴趣的朋友可以进来一起学习哦. 首先我们看下图,这是点击按钮便会弹出的一个窗口,进入这个窗口,我们会看到" ...
- 苹果电脑中怎么快速卸载Flash Player和浏览器扩展应用插件
Adobe Flash Player是一款轻量级浏览器插件,帮助你在网页浏览过程中享受更广泛的多媒体体验.是一种拓展,与Java一样,成为安全和隐私问题的重要来源.这些都需要手动删除的Flash是令人 ...
- yum安装软件时报错libmysqlclient.so.18()(64bit)
错误信息 yum -y install sysbench 安装sysbench提示缺少依赖包如下图: 主要原因 缺少Percona-XtraDB-Cluster-shared-55-5.5.37-25 ...
- docker中启动容器提示端口被占用
docker中启动容器提示端口被占用,但是 docker ps -a 查不到信息 1.查询端口被占用的id netstat -ntpl |grep 3306 2.杀掉该id kill -9 如果kil ...
- 安全的字符串拷贝strcpy_s的实现与理解
在C标准库中提供了字符串拷贝函数strcpy,而微软则为为它提供了一个更安全的版本strcpy_s,其函数原型为 errno_t __cdecl strcpy_s( char* _Destinatio ...
- RabbitMQ Go客户端教程5——topic
本文翻译自RabbitMQ官网的Go语言客户端系列教程,本文首发于我的个人博客:liwenzhou.com,教程共分为六篇,本文是第五篇--topic. 这些教程涵盖了使用RabbitMQ创建消息传递 ...
- 第7.17节 Python类中的静态方法装饰器staticmethod 定义的静态方法深入剖析
第7.17节 Python类中的静态方法装饰器staticmethod 定义的静态方法深入剖析 静态方法也是通过类定义的一种方法,一般将不需要访问类属性但是类需要具有的一些能力可以静态方法提供. 一 ...
- PyQt(Python+Qt)学习随笔:QListWidget的currentRow属性
QListWidget的currentRow属性保存当前项的位置,为整型,从0开始计数,在某些选择模式下,当前项可能也是选中项. currentRow属性可以通过方法currentRow().setC ...
- bugku never give up
打开网页,看到?id=1,很容易想到了爆破. 然后bp抓包爆破.(传说中的一秒爆破.) 看到了 1p.html . 直接访问 缓缓打出一个?(这是个锤子o,本来以为这里有flag,但是,这真的是论坛啊 ...
- Ambari HDP集群搭建全攻略
世界上最快的捷径,就是脚踏实地,本文已收录[架构技术专栏]关注这个喜欢分享的地方. 最近因为工作上需要重新用Ambari搭了一套Hadoop集群,就把搭建的过程记录了下来,也希望给有同样需求的小伙伴们 ...