学习使用k8s的童鞋都知道我们在部署pod的时候有时候需要手动去编写一些yaml文件;比如我需要编写deployment,那除了在其他地方粘贴拷贝外有没有其他方法呢?答案是有的
1.用run命令生成,然后作为模板进行编辑。
kubectl run --image=nginx my-deploy -o yaml --dry-run > my-deploy.yaml
2.用get命令导出,然后作为模板进行编辑。
# 注意: --export 是为了去除当前正在运行的这个deployment生成的一些状态,我们用不到就过滤掉
kubectl get deployment/nginx -o=yaml --export > new.yaml
3.Pod亲和性下面字段的拼写忘记了
kubectl explain pod.spec.affinity.podAffinity
示例:
我想生成一个有三个副本的redis pod的yaml,然后我想把这三个pod 通过node亲和性调度到同一个node节点上面;
1. 我这里用kubectl run来生成:
kubectl run redis --image=redis --replicas=3 --dry-run -o yaml > redis_node_affinity.yaml
2. 手写亲和性策略:
额 问题来了亲和性策略的字段我记不住啊,怎么办?那就需要通过kubectl explain RESOURCE [options]
来获取资源文档
怎么用?
比如我这里是要为pod做node的亲和性,那么一定是这个api接口下面的配置文档:想看pod的资源文档:
[root@k8s-m1 ~]# kubectl explain pod.spec.affinity
KIND: Pod
VERSION: v1
RESOURCE: affinity <Object>
DESCRIPTION:
If specified, the pod's scheduling constraints
Affinity is a group of affinity scheduling rules.
FIELDS:
nodeAffinity <Object>
Describes node affinity scheduling rules for the pod.
podAffinity <Object>
Describes pod affinity scheduling rules (e.g. co-locate this pod in the
same node, zone, etc. as some other pod(s)).
podAntiAffinity <Object>
Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod
in the same node, zone, etc. as some other pod(s)).
[root@k8s-m1 ~]#
上面我们通过 pod.spec.affinity
定位到了nodeAffinity
文档, 这些字段也是yaml种使用的字段,随后我通过一层一层的定位就大体上知道这些字段在yaml中是怎么使用的啦~
[root@k8s-m1 ~]# kubectl explain pods.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.matchExpressions
最后快速生成并且编辑的deployment yaml就写好了。
apiVersion: apps/v1beta1
kind: Deployment
metadata:
creationTimestamp: null
labels:
run: redis
name: redis
spec:
replicas: 3
selector:
matchLabels:
run: redis
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
run: redis
spec:
containers:
- image: redis
name: redis
resources: {}
# 以下内容就是我通过explain参数来查询到的我想要的字段写的
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- k8s-m1
status: {}

还是非常快速高效的。