一、Helm的介绍

1,概念

  Helm 把 k8s 资源(比如 deployments、services 或 ingress 等)打包到一个 chart 中,而 chart 被保存到 chart 仓库。通过 chart 仓库 可用来存储和分享 chart。Helm 使发布可配置,支持发布应用配置的版本管理,简化了 k8s 部署应用的版本控制、打包、发布、删除、更新等操作。

  做为 k8s 的一个包管理工具,Helm 具有如下功能:

  • 创建新的 chart
  • chart 打包成 tgz 格式
  • 上传 chart 到 chart 仓库或从仓库中下载 chart
  • 在 k8s 集群中安装或卸载 chart
  • 管理用 Helm 安装的 chart 的发布周期

2,Helm的三个重要概念

  1. chart:包含创建k8s的一个应用实例的必要信息
  2. config:包含了应用发布配置信息
  3. release:是一个chart及其配置的运行实例

3,Helm的组成部分

Helm Client 是用户命令行工具,其主要负责如下:

  • 本地 chart 开发
  • 仓库管理
  • 与 Tiller sever 交互
  • 发送预安装的 chart
  • 查询 release 信息
  • 要求升级或卸载已存在的 release

Tiller Server 是一个部署在 k8s 集群内部的 server,其与 Helm client、apiserver 进行交互。Tiller server 主要负责如下:

  • 监听来自 Helm client 的请求
  • 通过 chart 及其配置构建一次发布
  • 安装 chart 到 k8s 集群,并跟踪随后的发布
  • 通过与 k8s 交互升级或卸载 chart

  简单的说,client 管理 charts,而 server 管理发布 release。

二、Helm安装

1,安装Helm客户端

下载客户端包:https://github.com/helm/helm/releases

cd /usr/local/install-k8s/plugin/helm
#可提前下载安装包
wget https://get.helm.sh/helm-v2.13.1-linux-amd64.tar.gz
tar -zxvf helm-v2.13.1-linux-amd64.tar.gz.tar
cp ./linux-amd64/helm /usr/local/bin/

2,安装Tiller服务端

rbac.yaml

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

创建资源

kubectl create -f rbac.yaml
helm init --service-account tiller
helm init --service-account tiller --skip-refresh
#查看tiller的pod
kubectl get pod -n kube-system

  如果gcr.io/kubernetes-helm/tiller:v2.13.1镜像下载失败可采用离线docker load -i的方式导入。

3,查看Helm版本

[root@master01 helm]# helm version
Client: &version.Version{SemVer:"v2.13.1", GitCommit:"...", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.13.1", GitCommit:"...", GitTreeState:"clean"}

三、定义Helm模板

  helm的模板库:https://hub.helm.sh/

1,安装redis

#进入网址  https://hub.helm.sh/charts/bitnami/redis
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install bitnami/redis --version 11.0.

2,自定义模板

  自定义模板一般会用到 Chart.yamlvalues.yaml 和 templates 文件夹,其中:

  • Chart.yaml:必需。声明一个 Helm 模板,必须要有 name 和 version 两个属性,其值可以自定义。
  • templates 文件夹:必需。存放资源清单,比如 deployment.yaml、service.yaml 等等。运行 helm 就是为我们创建这里定义的资源。
  • valuse.yaml:可选。为资源清单提供可配置的 key - value 数据。

Chart.yaml

name: my-template
version: 1.0

values.yaml

#注意:在 values.yaml 中的值可以被部署 release 时用到的参数 --values yaml_file_path 或者 --set key1=value1, key2=value2 覆盖掉。
#例如 helm install --set image.tag=v2 .
image:
repository: hub.xcc.com/my-xcc/my-nginx
tag: v1

templates 下的 deployment.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: deployment-nginx
spec:
replicas:
template:
metadata:
labels:
app: nginx-app
spec:
containers:
- name: nginx-container
image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
ports:
- containerPort:

templates 下的 svc.yaml

apiVersion: v1
kind: Service
metadata:
name: svc-nginx
spec:
type: NodePort
selector:
app: nginx-app
ports:
- name: http
port:
targetPort:
nodePort:

执行命令

#在Chart.yaml和values.yaml同级目录下
helm install .
#查看helm或者使用 helm ls
helm list

四、helm常用命令

#查看帮助
helm help
#安装
helm install .
#查看helm列表
helm list
helm ls
#查看helm被删除列表
helm ls --deleted
#查看helm状态
helm status <helm-name>
#更新配置
helm upgrade <helm-name> .
#删除helm(标记删除)
helm delete <helm-name>
#彻底删除
helm delete --purge <helm-name>
#查看历史记录
helm history <helm-name>
#回滚helm,先查询上一步历史记录,根据记录回滚
helm rollback <helm-name> <reversion-number>
#检验文件正确性
helm install --dry-run .

五、修改证书有效时长

1,查看证书有效时长

#进入证书存放目录
cd /etc/kubernetes/pki
#查看apiserver.crt 证书有效期 为2020.7.11~2021.7.
openssl x509 -in apiserver.crt -text -noout
...
Validity
Not Before: Jul :: GMT
Not After : Jul :: GMT
...

2,修改有效时长

  修改方式有很多,这里我们采用通过修改kubeadm源码的方式,来实现延长证书的有效时长。

a)安装go语言

  因为 kubeadm 是 go 语言编写的,所以需要安装 go 语言。进入 go语言中文社区 点击下载。

#解压文件到指定目录
tar -xvf go1.15.2.linux-amd64.tar.gz -C /usr/local
#配置环境变量
echo "PATH=/usr/local/go/bin:$PATH" >> /etc/profile
source /etc/profile
#查看版本
go version

b)下载kubeadm源码

#下载源码
git clone https://github.com/kubernetes/kubernetes.git
cd kubernetes
#查看kubeadm版本
kubeadm version
#切换至kubeadm版本v1.15.1
git checkout -b remotes/origin/release-1.15. v1.15.1

c)修改代码

# kubeadm .14版本之后是修改这个文件
[root@master01 kubernetes]# vim cmd/kubeadm/app/util/pkiutil/pki_helpers.go
......
// NewSignedCert creates a signed certificate using the given CA certificate and key
func NewSignedCert(cfg *certutil.Config, key crypto.Signer, caCert *x509.Certificate, caKey crypto.Signer) (*x509.Certificate, error) {
# 定义一个我们想要的时间,time.Hour 表示一小时
const addTime = time.Hour * * *
serial, err := cryptorand.Int(cryptorand.Reader, new(big.Int).SetInt64(math.MaxInt64))
if err != nil {
return nil, err
}
if len(cfg.CommonName) == {
return nil, errors.New("must specify a CommonName")
}
if len(cfg.Usages) == {
return nil, errors.New("must specify at least one ExtKeyUsage")
} certTmpl := x509.Certificate{
Subject: pkix.Name{
CommonName: cfg.CommonName,
Organization: cfg.Organization,
},
DNSNames: cfg.AltNames.DNSNames,
IPAddresses: cfg.AltNames.IPs,
SerialNumber: serial,
NotBefore: caCert.NotBefore,
# 然后修改NotAfter
# NotAfter: time.Now().Add(kubeadmconstants.CertificateValidity).UTC(),
NotAfter: time.Now().Add(addTime).UTC(),
KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature,
ExtKeyUsage: cfg.Usages,
}
certDERBytes, err := x509.CreateCertificate(cryptorand.Reader, &certTmpl, caCert, key.Public(), caKey)
if err != nil {
return nil, err
}
return x509.ParseCertificate(certDERBytes)
}
......

编译生效

#重新编译
make WHAT=cmd/kubeadm GOFLAGS=-v
# 将编译好的 kubeadm 放入 /root 下
cp _output/bin/kubeadm /root/kubeadm
#将原有的 kubeadm 备份一下
cp /usr/bin/kubeadm /usr/bin/kubeadm.bak
#用新的 kubeadm 覆盖旧的 kubeadm
mv /root/kubeadm /usr/bin/kubeadm
# 赋予权限
chmod a+x /usr/bin/kubeadm
#备份 pki 文件夹
cp -r /etc/kubernetes/pki/ /etc/kubernetes/pki.bak
#重新生成证书文件
kubeadm alpha certs renew all --config=/usr/local/install-k8s/core/kubeadm-config.yaml

  再次查看证书有效期。

Kubernetes中的Helm和修改证书有效时间(八)的更多相关文章

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

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

  2. kubernetes 中的证书工作机制

    一文带你彻底厘清 Kubernetes 中的证书工作机制 搬砖者: 张首富 时 间: 2020-05-26 w x: y18163201 原文地址:https://zhaohuabing.com/po ...

  3. Helm, 在Kubernetes中部署应用的利器

    一.背景 Kubernetes(k8s)是一个基于容器技术的分布式架构领先方案.它在Docker技术的基础上,为容器化的应用提供部署运行.资源调度.服务发现和动态伸缩等一系列完整功能,提高了大规模容器 ...

  4. 4.第三篇 PKI基础概念、cfssl工具介绍及kubernetes中证书

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247483787&idx=1&sn=08dd3404 ...

  5. 关于 Kubernetes 中的 Volume 与 GlusterFS 分布式存储

    容器中持久化的文件生命周期是短暂的,如果容器中程序崩溃宕机,kubelet 就会重新启动,容器中的文件将会丢失,所以对于有状态的应用容器中持久化存储是至关重要的一个环节:另外很多时候一个 Pod 中可 ...

  6. Kubernetes 学习24 helm入门

    一.概述 1.我们此前在使用kubernetes中,无论我们使用无状态的应用程序,比如myapp,nginx.以及有状态的tomcat,redis,etcd,...等等,他们部署在k8s之上会有这样的 ...

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

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

  8. Kubernetes中分布式存储Rook-Ceph的使用:一个ASP.NET Core MVC的案例

    在<Kubernetes中分布式存储Rook-Ceph部署快速演练>文章中,我快速介绍了Kubernetes中分布式存储Rook-Ceph的部署过程,这里介绍如何在部署于Kubernete ...

  9. Kubernetes中予许及限制(PodSecurityPolicy)使用宿主机资源

    1.在pod中使用宿主机命名空间.端口等资源 pod中的容器通常在分开的Linux命名空间中运行.这些命名空间将容器中的进程与其他容器中,或者宿主机默认命名空间中的进程隔离开来. 例如,每一个pod有 ...

随机推荐

  1. python 3.7 jupyter中安装 docx报错

    from docx import Document报错: Import Error: No module named ‘exceptions‘ 解决办法: 使用下面的命令重新安装docx !pip i ...

  2. peer_manager_handler: Connection security failed: role: Peripheral, conn_handle: 0x0, procedure: Bonding, error: 133

    调试nordic 52840 hids_keyboard 例程时,和手机配对,配对失败,提示:peer_manager_handler: Connection security failed: rol ...

  3. CODING 仪表盘功能正式推出,实现工作数据可视化!

    CODING 仪表盘功能现已正式推出!该功能旨在用一张张统计卡片的形式,统计并展示使用 CODING 中所产生的数据.这意味着无需额外的设置,就可以收集归纳宝贵的工作数据并予之量化分析.这些海量的数据 ...

  4. JavaScript学习系列博客_13_JavaScript中的对象(Object)简介

    对象 对象属于一种复合的数据类型,在对象中可以保存多个不同数据类型的属性.除了那5种基本数据类型,就是对象. 分类:1.内建对象- 由ES标准中定义的对象,在任何的ES的实现中都可以使用- 比如:Ma ...

  5. Robot Framework(4)——Selenium2Library关键字

    在第一讲的时候,已经安装了Selenium2Library这个库,这一篇主要来整理介绍一下Selenium2Library中的常用关键字,为我们之后的web自动化打好基础 一.browserManag ...

  6. 测试和发布说明(Alpha版本)

    Alpha版本测试报告 1.测试中发现的BUG 已修复  服务器无法发送邮件 重复上传同一首歌曲 下载进度无法实时跟进 可以多次点击上传 注册验证码失真 上传结束无法及时清理队列信息 不可重现的BUG ...

  7. 第一篇Scrum冲刺博客

    目录 一.Alpha 阶段认领的任务 二.明日成员的任务安排 三.整个项目预期的任务量 四.敏捷开发前的感想 五.团队期望 一.Alpha 阶段认领的任务 陈起廷 任务 预计时间 日记天气.心情选择 ...

  8. 运用sed命令高效地删除文件的特定行

    运用 sed 命令高效地删除文件的特定行 正常来说,我们想要删除文件中的某些行内容,一般都是先打开这个文件,然后找到要删除的内容,再然后选中这些行并按删除键进行删除,这在数据量很少时是没有问题的.但是 ...

  9. 不同SEO对长尾关键词的不同做法

    http://www.wocaoseo.com/thread-122-1-1.html      长尾关键词指的是除目标关键词能带来搜索流量的关键词称之长尾关键词,它为一般由几个词语或短语组成,而且随 ...

  10. py_递归实例:汉诺塔问题

    递归的两个特点 调用自身 结束条件 # _*_coding:utf-8 ''' 递归实例:汉诺塔问题 n----盘子总数 a----第一个柱子 b----第二个柱子 c----第三个柱子 n个盘子时: ...