k8s命令实践

  1. 列出环境内所有的pod, 并以 name字段排序(使用kubectl自带排序功能)

kubuctl get pods --all-namespaces --sort-by=.metadata.name

类似命令, 列出集群内所有的pv,并以 name字段排序

kubectl get pv --sort-by=.metadata.name
  1. 列出指定pod的日志中状态为Error的行,并记录在指定的文件上

kubuctl logs mynode |grep Error > /tmp/aaa.log
  1. 通过命令行,使用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
  1. 通过命令行,使用nginx镜像创建一个pod。Pod的名称为pod5, 并添加两个标签,分别为app=nginx, disk=ssd。

    kubectl run pod5 –image nginx –labels app=nginx,disk=ssid

  2. 创建一个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
  1. 在每一个节点部署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: {}
  1. 创建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
  1. 创建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端口,他会映射到一个随机端口上。

  1. 创建一个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

  1. 在命名空间bob里面创建pv, 指定pv的名字为pv1, 挂载路径为/etc/config

答: todo

https://kubernetes.io/docs/concepts/storage/persistent-volumes/

  1. 为给定的 deployment website扩容到6个。

答: kubectl scale deployment website –replicat=6

  1. 查看给定集群ready的node个数

kubectl get nodes |wc -l
  1. 找出指定ns中使用cpu最高的pod名字并写入到指定文件

::

todo

  1. 备份etcd数据库

答: todo

  1. 使某个节点a不能被调度,并且已调度的pod重新调度。

答: kubectl drain <node-name> -ignore-daemonset –delete-local-data=true

如果需要删除节点,则再运行 kubectl delete node <node-name>

  1. 在k8s集群中创建kubelet直接管理的pod, 即创建静态pod.

答: 将创建pod的yaml文件放到/etc/kubernetes/manifests目录下,然后重启kubelet进程即可自动 加载该yaml文件。

创建的pod可以使用kubectl看到,但不能使用kubectl来管理。

  1. cs

kubectl get cs

难点:服务

参考