当前位置:   article > 正文

k8s创建资源_k8s 创建资源实例

k8s 创建资源实例

创建资源的两种方式

k8s中有两种方式可以创建资源:

  • 使用kubectl命令直接创建,例如
kubectl run nginx --replicas=2
  • 1

这种方式简单直观快捷,上手快,比较适合临时测试或实验。

  • 通过配置文件创建
kubectl apply -f nginx.yml
  • 1

这种方式提供了创建资源的模板,能够重复部署,可以像管理代码一样管理部署,比较适合正式的、跨环境的规模化部署。

理解了docker中创建容器的命令后,很好理解k8s通过命令直接创建,就不在继续说了。下面我们来看一看配置文件应该怎么写。

读懂yaml文件

我们拿部署bashboard的deployment时使用的yaml文件来举例,其他的controller也非常类似。

kind: Deployment
apiVersion: apps/v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kube-system
spec:
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      k8s-app: kubernetes-dashboard
  template:
    metadata:
      labels:
        k8s-app: kubernetes-dashboard
    spec:
     containers:
      - name: kubernetes-dashboard
        image: registry.cn-hangzhou.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.1
        ports:
        - containerPort: 8443
          protocol: TCP
        args:
          - --auto-generate-certificates
          # Uncomment the following line to manually specify Kubernetes API server Host
          # If not specified, Dashboard will attempt to auto discover the API server and connect
          # to it. Uncomment only if the default does not work.
          # - --apiserver-host=http://my-address:port
        volumeMounts:
        - name: kubernetes-dashboard-certs
          mountPath: /certs
          # Create on-disk volume to store exec logs
        - mountPath: /tmp
          name: tmp-volume
        livenessProbe:
          httpGet:
            scheme: HTTPS
            path: /
            port: 8443
          initialDelaySeconds: 30
          timeoutSeconds: 30
      volumes:
      - name: kubernetes-dashboard-certs
        secret:
          secretName: kubernetes-dashboard-certs
      - name: tmp-volume
        emptyDir: {}
      serviceAccountName: kubernetes-dashboard
      # Comment the following tolerations if Dashboard must not be deployed on master
      tolerations:
      - key: node-role.kubernetes.io/master
        effect: NoSchedule
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54

虽然看起来犹如天书,但是只要细细分析就能读懂它
我们都熟悉yaml文件的格式,它的每一行都类似一个键值对,抓住那些关键的键就能明白其中的信息

kind:要创建的资源类型,这里是deployment
apiVersion:当前配置格式的版本,这里是apps/v1
metadata:指出该资源的元数据,下面必须规定name
metadata下的label:设置将pod部署在指定node
spec:属于spec的部分指明该deployment的规格
replicas:指明副本数量,这里是1,意味整个k8s集群只创建一个此deployment的pod
template:定义pod的模板
template下的metadata:定义pod的元数据,其下至少要定义一个label
template下的spec:描述pod的规格,定义pod中每一个容器的属性,至少要有name和image
运行pod
	kubectl apply -f dashboard.yaml
删除pod
	kubectl delete -f dashboard.yaml
  • 1
  • 2
  • 3
  • 4

对于这个yaml文件我们可以做一些简单的修改以达到我们的目的

当然,yaml文件还可以有很多其他的项,想要精通用yaml文件在k8s中创建资源还需要多读多想多写,需要不断积累才能灵活运用。

伸缩

伸缩是指在线的增加或减少pod的副本数,直接修改replicas:参数的值即可。
k8s集群默认不会将pod部署在master节点

节点故障

若其中一个node故障,k8s会检测到此node不可用,将node上的pod标记为unknown,并在其他node上创建和失效node上一致的pod,使pod的数量保持不变。
当失效node恢复后,被标记为unknown的pod会被删除,已经运行的pod不会被调度回该node。

控制pod的位置

默认情况下,kube-scheduler可能会将pod调度到所有可用的node,不过有些时候我们会希望将pod部署到指定的node上,这时可以借助label。
label也是以键值对的形式写在yaml文件中的,各种资源都可以设置label,比如

给node2设置label
	kubectl label node node2 a=b
查看node2的label
	kubectl get nodes node2 --show-labels
	NAME    STATUS   ROLES    AGE   VERSION   LABELS
	node2   Ready    <none>   3d    v1.14.2   a=b,beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node2,kubernetes.io/os=linux
	是不是看到了刚才设置的label
打开yaml文件,在pod模板的spec里通过nodeSelector将此pod指定部署到a=b的node上
	nodeSelector:
	  a: b
要删除label执行
	kubectl label node node2 a-
	pod并不会随着label的删除而重新部署
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/128285
推荐阅读
相关标签
  

闽ICP备14008679号