Kubernetes中如何恢复误删的节点
在删除标签的时候不小心删除了节点。
$ kubectl delete nodes ln6 server-type-
node "ln6" deleted
Error from server (NotFound): nodes "server-type-" not found
在删除标签的时候不小心删除了节点。
$ kubectl delete nodes ln6 server-type-
node "ln6" deleted
Error from server (NotFound): nodes "server-type-" not found
| 指令 | 解释 |
|---|---|
| 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"
例子
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.io/master=:NoSchedule
ln2 172.16.33.158
ln3 172.16.33.159
ln6 172.16.33.174
key1=value1:NoSchedule
key1=value1:PreferNoSchedule
创建 Deployment 对象
$ kubectl apply -f kubia.yaml
deployment.apps/kubia created
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 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 的缩写
基于一个公共的模板运行多个Jobs。 你可以用这种方法来并行执行批处理任务。
查看 jobs 目录,可以看到下面的结果。
$ tree jobs
jobs
├── job-apple.yaml
├── job-banana.yaml
└── job-cherry.yaml
也可以直接创建 Job 对象
cat job.yaml.jinja2 | render_template | kubectl apply -f -
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"]
运行完成后再次查看,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
查看 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.
$ 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
apiVersion: v1
kind: Namespace
metadata:
name: kubia
$ kubectl apply -f kubia-namespace.yaml
namespace/kubia created
查看新创建的名字空间,ns 是 namespace 的缩写。
$ kubectl get ns kubia
NAME STATUS AGE
kubia Active 35s
$ kubectl describe pod kubia-manual
Name: kubia-manual
Namespace: default
Annotations: gouchicao.com/someannotation: test
通过添加两个标签将 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
$ 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-kzql7 1/1 Running 0 5d4h kubia
kubia-manual 1/1 Running 0 19h kubia
kubia-manual-v2 1/1 Running 0 26m kubia
通过端口转发(port-forward)可以连接到 Pod,方便测试和调试服务。
$ kubectl get pod kubia-manual -o json
$ kubectl logs kubia-manual
Kubia server starting...
可以看到容器的ID作为主机名
如果在集群外访问,将localhost替换为集群中的任意一台服务器的IP即可。
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text|grep ' Not '
Not Before: Jun 16 06:09:07 2020 GMT
Not After : Jun 16 06:09:07 2021 GMT
......
下表显示了手册的 章节 号及其包含的手册页类型。
1 可执行程序或 shell 命令
2 系统调用(内核提供的函数)
3 库调用(程序库中的函数)
4 特殊文件(通常位于 /dev)
5 文件格式和规范,如 /etc/passwd
6 游戏
7 杂项(包括宏包和规范,如 man(7),groff(7))
8 系统管理命令(通常只针对 root 用户)
9 内核例程 [非标准]
......
man 7 man
man man.7
man -a passwd
--Man-- 下一页: passwd(5) [ 查看 (return) | 跳过 (Ctrl-D) | 退出 (Ctrl-C) ]
help cd
cd --help
ls --help
info cd
- --policy-config-file=/etc/kubernetes/scheduler-policy-config.json
- mountPath: /etc/kubernetes/scheduler-policy-config.json
name: scheduler-policy-config
readOnly: true
- hostPath:
path: /etc/kubernetes/scheduler-policy-config.json
type: FileOrCreate
name: scheduler-policy-config
最终修改为 apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: component: kube-scheduler tier: control-plane name: kube-scheduler namespace: kube-system spec: containers: - command: - kube-scheduler - --authentication-kubeconfig=/etc/kubernetes/scheduler.
没有找到匹配的文章