k8s命令实践
列出环境内所有的pod, 并以 name字段排序(使用kubectl自带排序功能)
答
kubuctl get pods --all-namespaces --sort-by=.metadata.name
类似命令, 列出集群内所有的pv,并以 name字段排序
kubectl get pv --sort-by=.metadata.name
列出指定pod的日志中状态为Error的行,并记录在指定的文件上
kubuctl logs mynode |grep Error > /tmp/aaa.log
通过命令行,使用nginx镜像创建一个pod。Pod的名称为sdn-id。并导出其pod的yaml文件
使用nginx镜像创建一个pod
kubectl run sdn-id --image nginx
导出yaml文件
kubectl get pod sdn-id -o yaml > sdn-id.yaml
通过命令行,使用nginx镜像创建一个pod。Pod的名称为pod5, 并添加两个标签,分别为app=nginx, disk=ssd。
kubectl run pod5 –image nginx –labels app=nginx,disk=ssid
创建一个pod名称为nginx,并将其调度到标签为 disk=ssd 的节点上
答:首先使用命令创建yaml文件模板
kubectl run nginx --image=nginx --dry-run=client -o yaml > nginx_pod.yaml
然后进行修改,增加以下两行:
nodeSelector:
disk: ssd
最后使用命令进行创建:
kubectl apply -f nginx_pod.yaml
6. 创建包含两个容器的pod, 镜像分别使用nginx和redis.
kubectl apply -f mpod.yaml
mpod.yaml文件内容如下
apiVersion: v1
kind: Pod
metadata:
name: ex6
spec:
containers:
-name: nginx
image: nginx
-name: redis
image: redis
可以通过命令来查看 kubectl get pods。然后通过以下命令进入容器
kubectl exec ex6-qf2fq -c nginx -it -- /bin/bash
在每一个节点部署nginx, 提示采用daemonset。
kubectl apply -f ds.yaml, yaml文件为
apiVersion: apps/v1 kind: DaemonSet metadata: name: nginx namespace: default spec: selector: matchLabels: name: nginx template: metadata: labels: name: nginx spec: containers: - name: nginx image: nginx
8. 提供一个pod的yaml,要求添加Init Container,Init Container的作用是创建一个空文件/data/aa.conf, pod的Containers判断文件/data/aa.conf是否存在, 不存在则退出。
答: 需要两个容器共享存储,用到卷存储。yaml文件如下
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: busybox
command: ['sh', '-c', 'if [ ! -f /data/aa.conf ]; then exit 0; fi; echo "sleep 3600"; sleep 3600']
volumeMounts:
- mountPath: /data
name: mydata
initContainers:
- name: init-myservice
image: busybox
command: ['sh', '-c', "touch /data/aa.conf"]
volumeMounts:
- mountPath: /data
name: mydata
volumes:
- name: mydata
emptyDir: {}
创建nginx-app的deployment ,使用镜像为nginx:1.11.0, 升级镜像为1.11.3, 并记录升级, 再使用回滚, 将镜像回滚至nginx:1.11.0
# 创建nginx-app的deployment
kubectl run nginx-app --image=nginx:1.11.0 --record
# 升级镜像,nginx-app为container的名字
kubectl set image deployment nginx-app nginx-app=nginx:1.11.3
# 回滚
kubectl rollout undo deployment nginx-app
10. 通过命令创建一个deployment并暴露Service。要求使用nginx镜像,deployment拥有2个pod, deployment名称为bjbook。 提供创建命令、然后使用命令获取deployment 和service的yaml
[root@zhang1 ]# kubectl create deployment bjbook --image nginx --replicas 2 --port 80
[root@zhang1 ]# kubectl get service bjbook -o yaml > /tmp/bjbook_service.yaml
[root@zhang1 ]# kubectl get deployment bjbook -o yaml > /tmp/bjbook_deployment.yaml
使用命令查看pod
[root@zhang1 ]# kubectl get pod
NAME READY STATUS RESTARTS AGE
bjbook-6756b67bc4-sk9zm 1/1 Running 0 6m4s
bjbook-6756b67bc4-xdx77 1/1 Running 0 6m4s
创建pod并调度到指定节点,使用nginx镜像。
指定使用node2 来创建, 在spec中指定nodeName为 node2
$ cat pod-nodename.yaml
apiVersion: v1
kind: Pod
metadata:
name: bjbook
spec:
containers:
- image: nginx
name: mynginx
restartPolicy: Always
nodeName: node2
$ kubectl apply -f pod/pod-nodename.yaml
12. 创建和配置service, 名称为front-end-service。可以通过NodePort/ClusterIp访问 并路由到front-end的Pod上
答:
kubectl expose frond-end --name=front-end-service-1 --port=80 --type=NodePort
然后就可以访问目标pod的80端口,他会映射到一个随机端口上。
创建一个Pod, 名称为 Jenkins, 镜像使用Jenkins, 命名空间为website-frontend。
答
kubectl create ns website-frontend
cat jenkins-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: Jenkins
namespace: website-frontend
spec:
containers:
- image: Jenkins
name: Jenkins
restartPolicy: Always
kubectl apply -f jenkins-pod.yaml
14. 创建deployment的spec文件: 使用redis镜像,副本5个, label为app_stage=dev, deployment名称为bjbook,保存这个spec文件 到/opt/bjbook/deploy_spec.yaml。注意清除此任务生成的任何新的k8s对象。
答
apiVersion: v1
kind: deployment
metadata:
name: bjbook
label:
- app_stage: dev
spec:
replicas: 5
containers:
- image: redis
name: redis
保存到/opt/bjook/deploy_spec.yaml即可, 也可以采用:
kubectl apply -f <thisfile> --dry-run -o yaml > /opt/bjbook/deploy_spec.yaml
15. 创建一个secret,名称为supper-secret, 包含用户bob. 创建pod1挂载该secret, 路径为/secret. 创建pod2,使用环境变量引用该secret,环境变量名为ABC
答: todo
在命名空间bob里面创建pv, 指定pv的名字为pv1, 挂载路径为/etc/config
答: todo
https://kubernetes.io/docs/concepts/storage/persistent-volumes/
为给定的 deployment website扩容到6个。
答: kubectl scale deployment website –replicat=6
查看给定集群ready的node个数
kubectl get nodes |wc -l
找出指定ns中使用cpu最高的pod名字并写入到指定文件
- ::
todo
备份etcd数据库
答: todo
使某个节点a不能被调度,并且已调度的pod重新调度。
答: kubectl drain <node-name> -ignore-daemonset –delete-local-data=true
如果需要删除节点,则再运行 kubectl delete node <node-name>
在k8s集群中创建kubelet直接管理的pod, 即创建静态pod.
答: 将创建pod的yaml文件放到/etc/kubernetes/manifests目录下,然后重启kubelet进程即可自动 加载该yaml文件。
创建的pod可以使用kubectl看到,但不能使用kubectl来管理。
cs
kubectl get cs
难点:服务