Kubernetes中的Helm和修改证书有效时间(八)
一、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的三个重要概念
- chart:包含创建k8s的一个应用实例的必要信息
- config:包含了应用发布配置信息
- 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.yaml
、values.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和修改证书有效时间(八)的更多相关文章
- [转帖]Kubernetes中安装Helm及使用
Kubernetes中安装Helm及使用 2018年07月02日 17:41:09 灬勿忘丶心安 阅读数 3699更多 分类专栏: K8S 版权声明:本文为博主原创文章,遵循CC 4.0 BY-S ...
- kubernetes 中的证书工作机制
一文带你彻底厘清 Kubernetes 中的证书工作机制 搬砖者: 张首富 时 间: 2020-05-26 w x: y18163201 原文地址:https://zhaohuabing.com/po ...
- Helm, 在Kubernetes中部署应用的利器
一.背景 Kubernetes(k8s)是一个基于容器技术的分布式架构领先方案.它在Docker技术的基础上,为容器化的应用提供部署运行.资源调度.服务发现和动态伸缩等一系列完整功能,提高了大规模容器 ...
- 4.第三篇 PKI基础概念、cfssl工具介绍及kubernetes中证书
文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247483787&idx=1&sn=08dd3404 ...
- 关于 Kubernetes 中的 Volume 与 GlusterFS 分布式存储
容器中持久化的文件生命周期是短暂的,如果容器中程序崩溃宕机,kubelet 就会重新启动,容器中的文件将会丢失,所以对于有状态的应用容器中持久化存储是至关重要的一个环节:另外很多时候一个 Pod 中可 ...
- Kubernetes 学习24 helm入门
一.概述 1.我们此前在使用kubernetes中,无论我们使用无状态的应用程序,比如myapp,nginx.以及有状态的tomcat,redis,etcd,...等等,他们部署在k8s之上会有这样的 ...
- Kubernetes K8S之Helm部署、使用与示例
Kubernetes K8S之Helm部署.使用.常见操作与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2 ...
- Kubernetes中分布式存储Rook-Ceph的使用:一个ASP.NET Core MVC的案例
在<Kubernetes中分布式存储Rook-Ceph部署快速演练>文章中,我快速介绍了Kubernetes中分布式存储Rook-Ceph的部署过程,这里介绍如何在部署于Kubernete ...
- Kubernetes中予许及限制(PodSecurityPolicy)使用宿主机资源
1.在pod中使用宿主机命名空间.端口等资源 pod中的容器通常在分开的Linux命名空间中运行.这些命名空间将容器中的进程与其他容器中,或者宿主机默认命名空间中的进程隔离开来. 例如,每一个pod有 ...
随机推荐
- UML活动图(Activity Diagram)
目录: 1.什么是活动图 2.活动图的构成 (1)起点 (2)重点 (3)活动名称 (4)判断条件 (5)同步条 (6)接收信号 (7)发送信号 (8)泳道 (9)转移 3.活动图实例--订单处理 4 ...
- ssh连接:Socket error Event: 32 Error: 10053.
今天在使用xshell连接刚装的linux系统的时候,发现无法建立连接,会报如下错误: Connecting to 192.168.21x.x:22...Connection established. ...
- [PyTorch 学习笔记] 1.4 计算图与动态图机制
本章代码:https://github.com/zhangxiann/PyTorch_Practice/blob/master/lesson1/computational_graph.py 计算图 深 ...
- Linux环境下安装MySQL数据库
Linux安装mysql服务分两种安装方法: (1).源码安装,优点是安装包比较小,只有十多M,缺点是安装依赖的库多,安装编译时间长,安装步骤复杂容易出错: (2).使用官方编译好的二进制文件安装,优 ...
- MySQL进阶之MySQL索引以及索引优化
本文配合B站学习视频BV1es411u7we使用效果更佳. 1. MySQL版本 主流版本:5.x版 5.0 - 5.1:早期产品的延续,升级维护 5.4 - 5.x:MySQL整合了三方公司的新存储 ...
- asp.net Core3.1自定义权限体系-菜单和操作按钮权限
我们在做项目项目,经常会碰到权限体系,权限体系属于系统架构的一个最底层的功能,也是非常重要的功能,几乎在每个项目都会用到.那么我们该如何设计一个比较合理的且扩展性较强的权限体系呢? 经过多天的摸索,参 ...
- IDEA报错:Class JavaLaunchHelper is implemented in both
在IDEA运行一个程序时报错: Class JavaLaunchHelper is implemented in both 这个错误是Mac下Java 的一个bug,意思是这个JavaLaunchHe ...
- Python字符串类型格式化之format方法
python字符串格式化一般使用 format() 方法,用法如下: <模板字符串>.format(<逗号分割的参数>) 其中模板字符串中可以由一个或多个 {} 组成的 槽 , ...
- Pulsar 联合 TiDB 推出大数据场景数据应用分析解决方案
方案概述 大数据时代,各类应用对消息解决方案的要求不仅仅是数据的流动,而是要在持续增长的服务和应用中传输海量数据,进行智能的处理和分析,帮助业务做出更加精准的决策. Pulsar 与 TiDB 联合解 ...
- Android开发之将图片文件转化为字节数组字符串,并对其进行Base64编码处理
作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985, 转载请说明出处. /** * @将图片文件转化为字节数组字符串,并对其进行Base64编码处理 * ...