通过Kustomize进行清单管理
使用的背景
我认为现在在应用程序开发中,要对Pod进行更改时,很多人会使用kubectl apply等方法。
那里潜藏着各种人为错误的原因,如更改错误、选择manifest错误等。
因此,在这里使用的是kustomize。
通过使用它,Kubernetes能帮助防止上述情况。
准备好了
创建一个用于验证的目录。
# mkdir kustomize-manifest
在这下面创建两个目录,一个名为base,另一个名为production。
在base文件夹下创建以下三个文件。
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
type: ClusterIP
ports:
- name: "http-port"
protocol: "TCP"
port: 80
targetPort: 80
selector:
app: nginx
resources:
- nginx-deployment.yml
- nginx-service.yml
images:
- name: nginx
newTag: "1.17.0"
接下来,在production下创建以下两个项。
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
type: LoadBalancer
ports:
- name: "http-port"
protocol: "TCP"
port: 80
targetPort: 80
bases:
- ../base
namespace: "production"
patchesStrategicMerge:
- production-nginx-service.yml
kustomize 命令
那么,让我们回到kustomize-manifest目录下,并尝试输入以下命令。
# kubectl kustomize base
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
ports:
- name: http-port
port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: nginx:1.17.0
name: nginx
ports:
- containerPort: 80
我们可以看到将deployment.yml和svc.yml合并后的文件被显示出来。
接下来,我们将执行以下命令。
# kubectl kustomize production
apiVersion: v1
kind: Service
metadata:
name: nginx-service
namespace: production
spec:
ports:
- name: http-port
port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: production
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: nginx:1.17.0
name: nginx
ports:
- containerPort: 80
当合并后的yml文件显示出来时,您可以看到svc的类型已经变成了LoadBalancer。
这在 production 的 kustomize.yml 中。
bases:
- ../base
作为一个选项,我们可以指定一个基本的清单文件。
patchesStrategicMerge:
- production-nginx-service.yml
通过这样写,就可以在production-nginx-service.yml文件中更改svc。通过这种方式,我们成功地为production配置了LoadBalancer。
通过Kustomize创建并部署的。
可以用以下命令部署由Kustomize创建的内容。
# kubectl kustomize base | kubectl apply -f -
service/nginx-service created
deployment.apps/nginx-deployment created