# k8s正确的更新姿势

2 min read
文章目录

前言

公司的 CI/CD 平台研发要告一个段落了,在此记录一下如何使用 k8s 的客户端工具 kubectl 来进行更新操作的。

更新 Deployment

要知道 kubectl 是不支持 update 操作的,假设有如下Deployment.yaml需要进行部署:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
namespace: test
name: hello
spec:
selector:
matchLabels:
app: hello
replicas: 1
template:
metadata:
labels:
app: hello
spec:
containers:
- name: hello
image: nginx
imagePullPolicy: Always
ports:
- containerPort: 80
env:
- name: LOGGING_LEVEL
value: "INFO"
---
apiVersion: v1
kind: Service
metadata:
namespace: test
name: hello
spec:
selector:
app: hello
ports:
- protocol: TCP
port: 80
targetPort: 80
type: ClusterIP

只需要执行kubectl apply -f Deployment.yaml即可,可以理解为 createOrUpdate 操作。

更新 Secret

因为测试环境和预备环境的 HTTPS 证书是使用的letsencrypt的免费证书 ,每过一段时间都需要续签一次生成新的证书相关文件,所以每次生成完都需要更新 k8s 中对应的 secret 信息。

执行以下命令:

kubectl create secret tls hello \
--namespace test \
--key ./privkey.pem \
--cert ./fullchain.pem \
--dry-run \
-o yaml \
| \
kubectl apply -f -

主要是--dry-run配合-o yaml生成对应的 yaml 文件,然后再使用kubectl apply -f -进行更新。

  • —dry-run 表示不会发生实际的操作,也就是不会对 k8s 产生影响
  • kubectl apply -f - 表示拿到上一个管道的输入进行执行

More Posts

# Go语言flag接收slice和map类型参数

2 min read

go 自带的flag包可以很容易的实现一个命令行程序的参数解析,但是flag包默认只支持几个基本类型的参数解析,如果需要传递slice或者map类型时就要自定义了,这里记录一下。

阅读

# Go语言之交叉编译

10 min read

当初学习 go 语言的原因之一就是看中了 go 可以直接编译成机器码运行,并且支持跨操作系统的交叉编译,这对开发跨操作系统软件提供了极大的便利,这篇文章目的就是记录下 go 是如何交叉编译的。

阅读

评论区