好久好久没写文章了,回顾这一年,虽然做管理工作,但是从前端,后端,售前售后到运维。。。感觉什么都干了个遍,感谢公司能给我报销CKA考试,现在凭记忆就把题目给大家分享下,在网上搜了很多,跟去年的题都很像的,我考了90分,从去年陆陆续续的准备,还是学到了很多,有一点就是考试的时候网一定要好啊~我前半个小时就是和考官在折腾环境,一直都卡,后来重新计时了,也就是说我考了2个半小时,考官会一直跟你chat,连咳嗽多了都不行,我带的手链也要求摘下来。。。不过还是比较客气的~

原创啊,请勿转载

如果想要更多资料,欢迎打赏,嘿嘿,从来没收到过打赏~不打赏看到了可能也还是会给你的,大家加油

1 RBCA 

创建一个名为deployment-clusterrole且仅允许创建以下资源类型的新ClusterRole

Deployment

StatefulSet

DaemonSet

在现有的 namespace app-team1中创建一个名为cicd-token的新 ServiceAccount

限于 namespace app-team1中,将新的ClusterRole deployment-clusterrole绑定到新的 ServiceAccount cicd-token

kubectl create clusterrole deployment-clusterrole --verb=create --resource=deployments,statefulsets,daemonsets
kubectl -n app-team1 create serviceaccount cicd-token
kubectl -n app-team1 create rolebinding cicd-token-rolebinding --clusterrole=deployment-clusterrole --serviceaccount=app-team1:cicd-token

 

配置网络策略 NetworkPolicy(注意echo和my-app的名字好像换了)

在现有的namespace echo中创建一个名为allow-port-from-namespace的新NetworkPolicy

确保新的NetworkPolicy允许命名空间my-app的能访问my-app的所有pod的5768端口。

进一步确保新的NetworkPolicy:

不允许对没有在监听 端口5768的Pods的访问

不允许非来自 namespace my-app中的Pods的访问

apiVersion: networking.k8s.io/v1

kind: NetworkPolicy

metadata:

  name: allow-port-from-namespace

  namespace: echo   #目的命名空间

spec:

  podSelector:   {} # 注意这里我敲加matchLabels会出错,删了matchLabels这么写可以过

  policyTypes:

  - Ingress   #策略影响入栈流量

  ingress:

  - from:   #允许流量的来源

    - namespaceSelector:

        matchLabels:

          project: my-app    
  

    ports:

    - protocol: TCP

      port: 5768  #允许访问的端口

3 暴露服务

请重新配置现有的部署front-end以及添加名为http的端口规范来公开现有容器 nginx 的端口80/tcp

创建一个名为front-end-svc的新服务,以公开容器端口http

配置此服务,以通过在排定的节点上的 NodePort 来公开各个 Pods。

kubectl get deploy front-end

 

参考官方文档,按照需要edit deployment,添加端口信息

kubectl edit deployment front-end


    spec:

      containers:

      - image: vicuu/nginx:hello

        imagePullPolicy: IfNotPresent

        name: nginx     

        ports:        

        - name: http

          containerPort: 80

          protocol: TCP

 

然后暴露对应端口

kubectl expose deployment front-end --type=NodePort --port=80 --target-port=80 --name=front-end-svc # --name这个不要忘了

4 创建Ingress

如下创建一个新的nginx Ingress资源:

名称: ping

Namespace: ing-internal

使用服务端口 5678在路径 /hello 上公开服务 hello

可以使用以下命令检查服务 hello的可用性,该命令应返回 hello

apiVersion: networking.k8s.io/v1

kind: Ingress

metadata:

  name: ping

  namespace: ing-internal

  annotations:

    kubernetes.io/ingress.class: "nginx"   # 这句要加不然kubctl get ingress 不出来address

    nginx.ingress.kubernetes.io/rewrite-target: /

spec:

  rules:

  - http:

      paths:

      - path: /hello

        pathType: Prefix

        backend:

          service:

            name: hello

            port:

              number: 5678

5 扩容 deployment副本数量

这么简单不想说了贴个url吧 扩缩 StatefulSet | Kubernetes

6 nodeSelector

将 Pod 分配给节点 | Kubernetes

7 升级

我是按照升级到1.22.2 升级 kubeadm 集群 | Kubernetes

8 备份还原

export ETCDCTL_API=3

etcdctl --endpoints=https://127.0.0.1:2379 --cacert="/opt/KUIN00601/ca.crt" --cert="/opt/KUIN00601/etcd-client.crt" --key="/opt/KUIN00601/etcd-client.key" snapshot save /var/lib/backup/etcd-snapshot.db

etcdctl --endpoints=https://127.0.0.1:2379 --cacert="/opt/KUIN00601/ca.crt" --cert="/opt/KUIN00601/etcd-client.crt" --key="/opt/KUIN00601/etcd-client.key" snapshot restore /data/backup/etcd-snapshot-previous.db

这里记得要按提示题目exit出去

9 多容器的Pod(就两个好像)

Pods | Kubernetes

apiVersion: v1

kind: Pod

metadata:

  name: kucc8

spec:

  containers:

  - name: nginx

    image: nginx

  - name: redis

    image: redis

10 创建PV,PVC,及对应的POD

配置 Pod 以使用 PersistentVolume 作为存储 | Kubernetes

以这个链接为参考

11 排查集群中故障节点

ssh node01  

sudo -i   

 

检查kubelet服务

systemctl status kubelet

 

# 启动服务,并设置为开机启动

systemctl restart kubelet

systemctl enable kubelet

 

检查

systemctl status kubelet

12 drain 节点

kubectl cordon node01 
kubectl drain node01 --ignore-daemonsets --delete-emptydir-data --force #我试了下不加delete-emptydir-data会出错

13 找CPU消耗最高的Pod

kubectl top pod -l name=cpu-loader --sort-by=cpu -A

14 找日志

kubectl logs foo | grep "要搜的内容" 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐