kubernetes基本配置

| 分类 kubernetes  | 标签 docker  kubernetes  configure  浏览次数: -

命令 vs 配置文件

Kubernetes 支持两种方式创建资源:

  • 1.用 kubectl 命令直接创建,如下
kubectl run nginx-deployment --image=nginx:1.7.9 --replicas=2

在命令行中通过参数指定资源的属性。

  • 2.通过配置文件和 kubectl apply 创建,要完成前面同样的工作,可执行命令:

编写 nginx.yml 文件内容

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: web_server
  replicas: 2
  template:
    metadata:
      labels:
        app: web_server
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9

1.在 Deployment 中必须写 matchLables

2.在定义模板的时候必须定义labels,因为 Deployment.spec.selector 是必须字段,而他又必须和 template.labels 对应

3.template里面定义的内容会应用到下面所有的副本集里面,在 template.spec.containers 里面不能定义labels标签.

创建资源

kubectl apply -f nginx.yml

apiVersion 的字段可以再官网对应版本查看,比如 v16.2版本 的版本为 v1

kubectl api-versions 可以查看支持的所有版本

基于命令的方式

  • 1.简单直观快捷,上手快。
  • 2.适合临时测试或实验。

基于配置文件的方式

  • 1.配置文件描述了 What,即应用最终要达到的状态。
  • 2.配置文件提供了创建资源的模板,能够重复部署。
  • 3.可以像管理代码一样管理部署。
  • 4.适合正式的、跨环境的、规模化部署。

这种方式要求熟悉配置文件的语法,有一定难度.

Scale Up/Down Deployment

伸缩(Scale Up/Down)是指在线增加或减少 Pod 的副本数。

  • 修改副本数为 5, 并执行 apply
ubuntu2@root  ~ kubectl get deployment
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   2/2     2            2           7m15s
ubuntu2@root  ~ kubectl get replicaset
NAME                         DESIRED   CURRENT   READY   AGE
nginx-deployment-5b5dfcc76   2         2         2       7m18s
ubuntu2@root  ~ kubectl get pod -o wide
NAME                               READY   STATUS    RESTARTS   AGE     IP           NODE      NOMINATED NODE   READINESS GATES
nginx-deployment-5b5dfcc76-2xfj8   1/1     Running   0          7m20s   10.244.1.6   ubuntu3   <none>           <none>
nginx-deployment-5b5dfcc76-d2dfr   1/1     Running   0          7m20s   10.244.2.5   ubuntu1   <none>           <none>
ubuntu2@root  ~ vi nginx.yml
ubuntu2@root  ~ cat nginx.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: web_server
  replicas: 5
  template:
    metadata:
      labels:
        app: web_server
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9

ubuntu2@root  ~ kubectl apply -f nginx.yml
deployment.apps/nginx-deployment configured
ubuntu2@root  ~ kubectl get deployment
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   5/5     5            5           7m43s
ubuntu2@root  ~ kubectl get replicaset
NAME                         DESIRED   CURRENT   READY   AGE
nginx-deployment-5b5dfcc76   5         5         5       7m50s
ubuntu2@root  ~ kubectl get pod -o wide
NAME                               READY   STATUS    RESTARTS   AGE     IP           NODE      NOMINATED NODE   READINESS GATES
nginx-deployment-5b5dfcc76-2xfj8   1/1     Running   0          7m53s   10.244.1.6   ubuntu3   <none>           <none>
nginx-deployment-5b5dfcc76-d2dfr   1/1     Running   0          7m53s   10.244.2.5   ubuntu1   <none>           <none>
nginx-deployment-5b5dfcc76-jl4xq   1/1     Running   0          15s     10.244.2.6   ubuntu1   <none>           <none>
nginx-deployment-5b5dfcc76-krj5d   1/1     Running   0          15s     10.244.1.8   ubuntu3   <none>           <none>
nginx-deployment-5b5dfcc76-pw45z   1/1     Running   0          15s     10.244.1.7   ubuntu3   <none>           <none>
ubuntu2@root  ~

出于安全考虑,默认配置下 Kubernetes 不会将 Pod 调度到 Master 节点。

  • Master当Node节点使用
kubectl taint node `hostname -s` node-role.kubernetes.io/master-
  • 恢复Master Only
kubectl taint node `hostname -s` node-role.kubernetes.io/master="":NoSchedule

用lable控制Pod位置

label 是 key-value 对,各种资源都可以设置 label,灵活添加各种自定义属性。

kubectl label node ubuntu2 disktype=ssd
kubectl get node --show-labels
  • 将pod部署到 disktype=ssd 的节点上
ubuntu2@root  ~ vi nginx.yml
ubuntu2@root  ~ cat nginx.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: web_server
  replicas: 5
  template:
    metadata:
      labels:
        app: web_server
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
      nodeSelector:
        disktype: ssd

ubuntu2@root  ~ kubectl apply -f nginx.yml
deployment.apps/nginx-deployment unchanged
ubuntu2@root  ~ kubectl get pod -o wide
NAME                                READY   STATUS              RESTARTS   AGE     IP            NODE      NOMINATED NODE   READINESS GATES
nginx-deployment-7bb8d48dd6-29bhz   0/1     ContainerCreating   0          3m27s   <none>        ubuntu2   <none>           <none>
nginx-deployment-7bb8d48dd6-6p56w   1/1     Running             0          36s     10.244.0.9    ubuntu2   <none>           <none>
nginx-deployment-7bb8d48dd6-k8j6f   1/1     Running             0          3m28s   10.244.0.6    ubuntu2   <none>           <none>
nginx-deployment-7bb8d48dd6-mhnzf   1/1     Running             0          34s     10.244.0.10   ubuntu2   <none>           <none>
nginx-deployment-7bb8d48dd6-mkttd   1/1     Running             0          3m28s   10.244.0.7    ubuntu2   <none>           <none>
  • 删除label
kubectl label node `hostname -s` disktype-

DaemonSet

Deployment 部署的副本Pod会分布在各个Node上,每个Node都可能运行N个副本。

DaemonSet的不同之处在于: 每个Node上最多只能运行一个副本

DaemonSet 的典型应用场景有:

  • 1.在集群的每个节点上运行存储 Daemon,比如 glusterd 或 ceph。
  • 2.在每个节点上运行日志收集 Daemon,比如 flunentd 或 logstash。
  • 3.在每个节点上运行监控 Daemon,比如 Prometheus Node Exporter 或 collectd。

Kubernetes 自己就在用 DaemonSet 运行系统组件

ubuntu2@root  ~ kubectl get daemonset --namespace=kube-system
NAME                      DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR                 AGE
kube-flannel-ds-amd64     3         3         3       3            3           <none>                        35h
kube-flannel-ds-arm       0         0         0       0            0           <none>                        35h
kube-flannel-ds-arm64     0         0         0       0            0           <none>                        35h
kube-flannel-ds-ppc64le   0         0         0       0            0           <none>                        35h
kube-flannel-ds-s390x     0         0         0       0            0           <none>                        35h
kube-proxy                3         3         3       3            3           beta.kubernetes.io/os=linux   35h
ubuntu2@root  ~

上一篇 kubernetes架构     下一篇 kubernetes Job实践
目录导航