22 篇文章带有标签 “kubectl”

安装Kubernetes Dashboard

过几分钟后您将看到 kubernetes-dashboard 名字空间下会有 Pod 运行。

kubectl get pods -n kubernetes-dashboard

NAME                                         READY   STATUS    RESTARTS   AGE
dashboard-metrics-scraper-6b4884c9d5-27xf6   1/1     Running   0          4m
kubernetes-dashboard-7b544877d5-mfmbp        1/1     Running   0          4m
cat <<EOF | kubectl apply -f -
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
// ...

输入 Token 信息登录。完成后,我们可以看到 Kubernetes 集群信息。

在您的本地浏览器输入地址 http://loca

Kubernetes中的计算资源管理

容器内运行 top

kubectl exec -it requests-pod top
Mem: 369767748K used, 26208028K free, 51000K shrd, 3765588K buff, 294978160K cached
CPU:  3.1% usr  1.5% sys  0.0% nic 95.2% idle  0.0% io  0.0% irq  0.0% sirq
Load average: 1.44 1.65 1.66 4/6602 18
  PID  PPID USER     STAT   VSZ %VSZ CPU %CPU COMMAND
    1     0 root     R     1308  0.0  27  2.5 dd if /dev/zero of /dev/null
   13     0 root     R     1324  0.0  38  0.0 top

★ 在容器内看到的 CPU 和内存是节点的。

top 命令显示占用了 2.5% CPU,对于 40 核的系统来说显然是占用了一个核。requests 不会限制资源的使用数量,因为是单线程,最多也就能用满一个核。

容器内运行 top kubectl exec -it limits-pod top Mem: 370581688K used, 25394088K free, 50976K shrd, 3774664K buff, 292993444K cached

ConfigMap和Secret:配置应用程序

指令 解释
ENTRYPOINT 容器启动时调用的命令
CMD 传递给 ENTRYPOINT 指定命令的参数

编写 Dockerfile

FROM busybox
ADD date.sh /date.sh
RUN chmod +x /date.sh
ENTRYPOINT ["/date.sh"]
CMD ["1"]

参数默认值为 1,在运行容器可以设置参数覆盖默认值。

构建镜像

docker build -t wangjunjian/date:args .

启动镜像

$ docker run wangjunjian/date:args
Tue Aug 3 13:08:04 UTC 2021
Tue Aug 3 13:08:05 UTC 2021

设置参数覆盖默认睡眠时间

$ docker run wangjunjian/date:args 3
Tue Aug 3 13:08:46 UTC 2021
Tue Aug 3 13:08:49 UTC 2021

覆盖默认的命令

$ docker run --entrypoint=/bin/sh wangjunjian/date:args
/ # 

少量参数的设置可以使用上面的数组表示,当参数过多时可以使用下面的方式,如果参数是数值型需要使用引号。

    args:
    - str
    - "3"

Kubernetes中的污点和容忍度

例子

dedicated=foo:PreferNoSchedule
node-role.kubernetes.io/master:NoSchedule
node.kubernetes.io/unreachable:NoExecute
node.kubernetes.io/unreachable:NoSchedule

一个 key 可以有多个 effect

查看集群所有节点的污点信息 $ kubectl get nodes -o=jsonpath='{range .items[]}{.metadata.name}{"\t"}{.status.addresses[0].address}{"\n"}{range .spec.taints[]}{"\t"}{.key}{"="}{.value}{":"}{.effect}{"\n"}{end}{end}' gpu1 172.16.33.66 node.kubernetes.io/unreachable=:NoSchedule node.kubernetes.io/unreachable=:NoExecute ln1 172.16.33.157 node-role.kubernetes.

Kubernetes中的Service

创建 Deployment 对象

$ kubectl apply -f kubia.yaml 
deployment.apps/kubia created
  • 使用 YAML 文件
apiVersion: v1
kind: Service
metadata:
  name: kubia
  labels:
    app: kubia
spec:
  ports:
  - port: 80
    targetPort: 8080
  selector:
    app: kubia

创建 Service 对象

$ kubectl apply -f kubia-service.yaml 
service/kubia created
  • 使用命令 kubectl expose
$ kubectl expose deployment kubia --name=kubia-http
service/kubia-http exposed

查看服务

$ kubectl get svc
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
kubia        ClusterIP   10.109.180.140   <none>        80/TCP    11m
kubia-http   ClusterIP   10.101.40.142    <none>        80/TCP    9m57s

svc 是 Service 的缩写

基于模板创建Job

基于一个公共的模板运行多个Jobs。 你可以用这种方法来并行执行批处理任务。

查看 jobs 目录,可以看到下面的结果。

$ tree jobs
jobs
├── job-apple.yaml
├── job-banana.yaml
└── job-cherry.yaml

也可以直接创建 Job 对象

cat job.yaml.jinja2 | render_template | kubectl apply -f -

Kubernetes中的Job和CronJob

tan(π/4) = 1。所以,4*atan(1)正好就是π,也就是 3.1415926…。

apiVersion: batch/v1
kind: Job
metadata:
  name: pi
spec:
  template:
    spec:
      restartPolicy: Never
      containers:
      - name: pi
        image: alpine
        command: ["sh", "-c", "echo 'scale=6000; 4*a(1)' | bc -l"]
  • restartPolicy: Pod 内所有容器的重启策略。对于 Job 重启策略只能是 OnFailure 和 Never,默认是 Always。
    • OnFailure
    • Never
    • Always(default)

运行完成后再次查看,Pod 的状态变为 Completed,不会自动删除,方便您查看日志。

$ kubectl get all
NAME           READY   STATUS      RESTARTS   AGE
pod/pi-866nk   0/1     Completed   0          11m

NAME           COMPLETIONS   DURATION   AGE
job.batch/pi   1/1           10m        11m

查看 Job 对象的描述 $ kubectl describe job pi

Kubernetes中的DaemonSet

查看 Pod 对象

$ kubectl get pods -o wide
NAME          READY   STATUS              RESTARTS   AGE   IP           NODE   NOMINATED NODE   READINESS GATES
kubia-h48q8   1/1     Running             0          23s   10.38.0.19   ln2    <none>           <none>
kubia-tx5hz   1/1     Running             0          23s   10.34.0.10   ln6    <none>           <none>
kubia-x9479   0/1     ContainerCreating   0          23s   <none>       ln3    <none>           <none>

修改 DaemonSet 的YAML文件(kubia-ds.yaml) apiVersion: apps/v1 kind: DaemonSet metadata: name: kubia spec: selector: matchLabels: app: kubia template: metadata: labels: app: kubia spec: tolerations: - key: node-role.kubernetes.

Kubernetes中的ReplicationController和ReplicaSet

$ kubectl get pods
NAME          READY   STATUS              RESTARTS   AGE
kubia-j8tth   0/1     ContainerCreating   0          35s
kubia-jkt8g   1/1     Running             0          35s
$ kubectl describe rc kubia
Name:         kubia
Namespace:    kubia
Selector:     app=kubia
Labels:       app=kubia
Annotations:  Replicas:  2 current / 2 desired
Pods Status:  1 Running / 1 Waiting / 0 Succeeded / 0 Failed
Pod Template:
  Labels:  app=kubia
  Containers:
   kubia:
    Image:        wangjunjian/kubia:latest
    Port:         8080/TCP
    Host Port:    0/TCP
    Environment:  <none>
// ...

当删除 Pod 对象后,ReplicationController 会自动创建新的 Pod 对象来满足期望的副本个数。

$ kubectl delete pod kubia-jkt8g 
pod "kubia-jkt8g" deleted

Kubernetes中的标签和标签选择器

通过添加两个标签将 Pod 组织为两个维度(基于应用的横向维度和基于版本的纵向维度)

  • 更新(--overwrite
$ kubectl label pod kubia-manual-v2 app=kubia --overwrite
pod/kubia-manual-v2 labeled
$ kubectl get pods -L app,rel
NAME                    READY   STATUS    RESTARTS   AGE    APP     REL
kubia-864465c9d-744qc   1/1     Running   0          5d4h   kubia   
kubia-864465c9d-kzql7   1/1     Running   0          5d4h   kubia   
kubia-manual            1/1     Running   0          19h    kubia   
kubia-manual-v2         1/1     Running   0          22m    kubia   stable

删除(key-) $ kubectl label pod kubia-manual-v2 rel- pod/kubia-manual-v2 labeled $ kubectl get pods -L app,rel NAME READY STATUS RESTARTS AGE APP REL kubia-864465c9d-744qc 1/1 Running 0 5d4h kubia kubia-864465c9d-