首页 > 其他分享 >k8s-CKA-2022真题

k8s-CKA-2022真题

时间:2023-09-28 13:38:14浏览次数:51  
标签:kubectl CKA name nginx -- 创建 yaml 2022 k8s


目录

1.创建pod

2.创建deployment和service

3.设置节点不可用

4.修改deployment数量为6

5. 添加标签

6.创建多容器

7.deployment版本升级回退

8.创建用户和授权

9.创建NetworkPolicy,

9.1  创建02 NetworkPolicy

10.创建ingress

11.创建一个 pv

12.创建pvc

13.查看日志

14.添加一个名为 busybox

15.查找pod

16.检查集群状态

17.升级版本kubelet 和 kubectl

18.etcd 创建快照,恢复快照

19.统计有污点的节点


 

 

 

 

 

 

 

 

1.创建pod

设置配置环境 kubectl config use-context k8s

按如下要求调度一个 pod:
名称:nginx-kusc00401

image: nginx

Node selector: disk=ssd

kubectl config use-context k8s

kubectl run nginx-kusc00401 --image=nginx --dry-run=client -o yaml > 1.yaml

 

k8s-CKA-2022真题_开发语言

 

kubectl apply -f 1.yaml

2.创建deployment和service

设置配置环境 kubectl config use-context k8s
请重新配置现有的部署 front-end 以及添加名为 http 的端口规范来公开现有容器 nginx 的端 口 80/tcp。
创建一个名为 front-end-svc 的新服务,以公开容器端口 http。 配置此服务,以通过在排定的节点上的 NodePort 来公开各个 pods。
 

kubectl config use-context k8s
kubectl get deployments.apps

kubectl edit deployments.apps front-end

 

# edit编辑时只能使用空格,不要TAB否则保存不了

# 添加如下配置,主要是在 name 为 nginx 的容器下

spec:
      containers:
      - image: nginx
        imagePullPolicy: Always
        name: nginx
        ports:
        - containerPort: 80
          name: http
          protocol: TCP

 

 

kubectl expose deploy front-end --name=front-end-svc --port=80 --target-port=http --type=NodePort

 

 

3.设置节点不可用

将 k8s-node02 节点设置为不可用,然后重新调度该节点上的所有 Pod然后重新调度该节点上的所有 Pod

kubectl cordon k8s-node02

#腾空节点以准备维护
kubectl drain k8s-node02 --ignore-daemonsets --delete-emptydir-data --force

 

 

4.修改deployment数量为6

kubectl scale deployment hwcka-002 --replicas=6

 

5. 添加标签

nginx打标签 labels  key1=rw01  key2=rw02

kubectl run hwcka-005 --image=nginx --labels key1=rw01,key2=rw02 --dry-run=client -o yaml > 5.yaml

kubectl apply -f 5.yaml

6.创建多容器

创建多容器 nginx redis memcached consul

kubectl run hwcka-006 --image=nginx --dry-run=client -o yaml > 6.yaml

 

#修改
vim 6.yaml

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  name: hwcka-006
spec:
  containers:
  - image: nginx
    name: nginx
  - image: redis
    name: redis
  - image: memcached
    name: memcached
  - image: consul
    name: consul

 

kubectl apply -f 6.yaml

7.deployment版本升级回退

7.0创建deplpyment版本nginx
7.1修改镜像1.12.0,并记录这个更新
7.3回退到上个版本

kubectl create deployment hwcka-007 --image=nginx --dry-run=client -o yaml > 7.yaml

kubectl apply -f 7.yaml

kubectl edit deployments.apps hwcka-007 --record

kubectl rollout history deployment hwcka-007

kubectl rollout undo deployment hwcka-007 --to-revision=1

 

 

8.创建用户和授权

创建一个名为 rw-clusterrole 的 clusterrole
该 clusterrole 只允许创建 Deployment、Daemonset、Statefulset 的 create 操作;
在名字为 rw 的 namespace 下创建一个名为 cicd-token 的 serviceAccount,
并且将上一步创建 clusterrole 的权限绑定到该 serviceAccount
该 clusterrole 只允许创建 Deployment、Daemonset、Statefulset 的 create 操作;
在名字为 app-team1 的 namespace 下创建一个名为 cicd-token 的 serviceAccount,
并且将上一步创建 clusterrole 的权限绑定到该 serviceAccount

kubectl create clusterrole rw-clusterrole --verb=create --resource=deployments,daemonsets,statefulsets --dry-run=client -o yaml > 8.yaml
kubectl apply -f 8.yaml
kubectl get clusterrole |grep rw-clusterrole

kubectl create ns rw

kubectl -n rw create  serviceaccount cicd-token

kubectl -n rw create rolebinding rw-clusterrole-rolebinding --clusterrole=rw-clusterrole --serviceaccount=rw:cicd-token --dry-run=client -o yaml > 8b.yaml

kubectl apply -f 8b.yaml

9.创建NetworkPolicy,

创建一个名字为 rw-port-from-namespace 的 NetworkPolicy,这个 NetworkPolicy 允许 rw命名空间下的 Pod 访问该命名空间下的 9000 端口。
并且不允许不是 rw 命令空间的下的 Pod 访问不允许访问没有监听 9000 端口的 Pod。

官网参考:网络策略 | Kubernetes

vim 9.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: rw-port-from-namespace
  namespace: rw
spec:
  ingress:
    - from:
        - podSelector: {}
      ports:
        - protocol: TCP
          port: 9000
  podSelector: {}
  policyTypes:
  - Ingress

 

kubectl apply -f 9.yaml

 

 

9.1  创建02 NetworkPolicy

在命名空间 fubar 中创建名为 allow-port-from-namespace 新的NetworkPolicy,

确保新的NetworkPolicy允许namespace  corp-net中的pods连接namespace  fubar中的pods的端口8080

进一步确保新的NetworkPolicy

不允许对没有在监听的端口8080的pods的访问

不允许非来自namespace corp-net中的pods的访问

 

查看ns标签
# kubectl get ns corp-net --show-labels

vi networkpolicy.yaml

 

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-port-from-namespace
  namespace: fubar
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  ingress:
    - from:
        - namespaceSelector:
            matchLabels:
              kubernetes.io/metadata.name: corp-net

# 此处podSelector前不要加 - ,加了则表示furbar 中的pod都可以访问furbar的80端口
          podSelector:
            matchLabels: {}
      ports:
        - protocol: TCP
          port: 8080

 

# 应用yaml
# kubectl apply -f networkpolicy.yaml

 

10.创建ingress

在 ing-internal 命名空间下创建一个 ingress,名字为 pong,代理的 service hi,端口为 5678,

配置路径/hi。
验证:访问 curl -kL <INTERNAL_IP>/hi 会返回 hi

参考:Ingress | Kubernetes

vim 10.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: pong
  namespace: ing-internal
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /hi
        pathType: Prefix
        backend:
          service:
            name: hi
            port:
              number: 5678

 

 

kubectl apply -f 10.yaml

 

11.创建一个 pv

创建一个 pv,名字为 app-config,大小为 2Gi,访问权限为 ReadWriteMany。

Volume 的类型为hostPath,路径为/srv/app-config

参考:https://kubernetes.io/zh-cn/docs/concepts/storage/persistent-volumes/

vim 11.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: app-config
spec:
  capacity:
    storage: 2Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Recycle
  hostPath:
     path: "/srv/app-config"

kubectl apply -f 11.yaml

kubectl get pv

 

12.创建pvc

创建一个名字为 pv-volume 的 pvc,指定 storageClass 为 nfs-boge,大小为 10Mi
然后创建一个 Pod,名字为 web-server,镜像为 nginx,并且挂载该 PVC 至/usr/share/nginx/html,挂
载的权限为 ReadWriteOnce。之后通过 kubectl edit 或者 kubectl path 将 pvc 改成 70Mi,并且记录修
改记录。

参考:持久卷 | Kubernetes

vim 12.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pv-volume
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Mi
  storageClassName: nfs-boge

 

kubectl apply -f 12.yaml

kubectl get pvc

vim 12-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: web-server
spec:
  containers:
    - name: nginx
      image: nginx
      volumeMounts:
      - mountPath: "/usr/share/nginx/html"
        name: mypd
  volumes:
    - name: mypd
      persistentVolumeClaim:
        claimName: pv-volume

 

kubectl apply -f 12-pod.yaml

kubectl edit pvc pv-volume --record

 

13.查看日志

监控名为 foobar 的 Pod 的日志,并过滤出具有 unable-access-website 信息的行,然后将写入到/opt/KUTR00101/foobar

kubectl logs foobar |grep unable-access-website  > /opt/KUTR00101/foobar

 

14.添加一个名为 busybox

且镜像为 busybox 的 sidecar 到一个已经存在的名为 legacy-app 的 Pod
上,这个 sidecar 的启动命令为/bin/sh, -c, 'tail -n+1 -f /var/log/legacy-app.log'。
并且这个 sidecar 和原有的镜像挂载一个名为 logs 的 volume,挂载的目录为/var/log/

日志架构 | Kubernetes

#提取yaml

kubectl get pod legacy-app -o yaml > 14.yaml

k8s-CKA-2022真题_nginx_02

 

 

kubectl delete pod legacy-app

 

kubectl apply -f 14.yaml

 

kubectl get pod legacy-app

 

 

15.查找pod

找出具有 name=cpu-user 的 Pod,并过滤出使用 CPU 最高的 Pod,然后把它的名字写在已经存在的/opt/KUTR00401/KUTR00401.txt 文件里

(注意他没有说指定 namespace。所以需要使用-A 指定所以 namespace)

 

kubectl top po -A -l app=cpu-user --sort-by='cpu'

 

echo "kuboard-v3-658bfff6c5-f6m2n " > /opt/KUTR00401/KUTR00401.txt

 

 

 

16.检查集群状态

一个名为 wk8s-node-0 的节点状态为 NotReady,让其他恢复至正常状态,并确认所有的更改开机
自动完成

ssh wk8s-node-0

systemctl restart kubelet.service

systemctl enable kubelet.service

17.升级版本kubelet 和 kubectl

现有的 Kubernetes 集权正在运行的版本是 1.24.4,仅将主节点上的所有 kubernetes 控制面板和
组件升级到版本 1.25.0 另外,在主节点上升级 kubelet 和 kubectl

参考:升级 kubeadm 集群 | Kubernetes

kubectl cordon k8s-mast
kubectl drain k8s-mast --ignore-daemonsets --delete-emptydir-data --force

apt update
apt-cache madison kubeadm

apt-mark unhold kubeadm

apt-get update
apt-get install -y kubeadm=1.25.0-00
apt-mark hold kubeadm

sudo kubeadm upgrade apply v1.25.0 --etcd-upgrade=false

apt-mark unhold kubelet kubectl

apt-get update
apt-get install -y kubelet=1.25.0-00 kubectl=1.25.0-00

apt-mark hold kubelet kubectl

sudo systemctl daemon-reload
sudo systemctl restart kubelet

18.etcd 创建快照,恢复快照

针对 etcd 实例 https://127.0.0.1:2379 创建一个快照,
保存到/data/rwbak/etcd-snapshot-previous-20220908-1.db
在创建快照的过程中,如果卡住了,就键入 ctrl+c 终止,然后重试。
然后恢复一个已经存在的快照: /data/rwbak/etcd-snapshot-previous-20220908-2.db
执行 etcdctl 命令的证书存放在:
ca 证书:/etc/kubernetes/pki/etcd/ca.crt
客户端证书:/etc/kubernetes/pki/etcd/server.crt
客户端密钥:/etc/kubernetes/pki/etcd/server.key

参考:为 Kubernetes 运行 etcd 集群 | Kubernetes

#备份
sudo ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
  --cacert=/etc/kubernetes/pki/etcd/ca.crt \
 --cert=/etc/kubernetes/pki/etcd/server.crt \
 --key=/etc/kubernetes/pki/etcd/server.key \
  snapshot save /data/rwbak/etcd-snapshot-previous-20220908-1.db

 

sudo mv /etc/kubernetes/manifests /etc/kubernetes/manifests.bak

sudo mv /var/lib/etcd /var/lib/etcd.bak

 

#恢复
sudo ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
  --cacert=/etc/kubernetes/pki/etcd/ca.crt \
 --cert=/etc/kubernetes/pki/etcd/server.crt \
 --key=/etc/kubernetes/pki/etcd/server.key \
  snapshot restore /data/rwbak/etcd-snapshot-previous-20220908-2.db --data-dir=/var/lib/etcd

 

sudo mv /etc/kubernetes/manifests.bak /etc/kubernetes/manifests

 

 

 

 

19.统计有污点的节点

#偷懒写法

kubectl describe nodes |grep -i taint

#有NoSchedule 就是有污点的

k8s-CKA-2022真题_java_03

 

#写全的写法

kubectl describe node | grep Taint | grep NoSchedule

 

 

 

标签:kubectl,CKA,name,nginx,--,创建,yaml,2022,k8s
From: https://blog.51cto.com/dxbp/7638083

相关文章

  • k8s持久化存储01 emptyDir hostPath
    本质上,K8svolume是一个目录,这点和Dockervolume差不多,当Volume被mount到Pod上,这个Pod中的所有容器都可以访问这个volume,常用的类型有这几种:emptyDirhostPathPersistentVolume(PV)&PersistentVolumeClaim(PVC)StorageClass01.emptyDiremptyDir是最基础的Volume类型,pod内的容器......
  • k8s 版本升级1.18.0>>>1.18.20
    1.1升级步骤注意kubectl命令主节点执行,yum命令需要升级的服务器执行;查看当前系统支持的所有k8s版本和当前版本yumlist--showduplicateskubeadm--disableexcludes=kubernetes2.1.1升级控制节点1、查看当前版本和升级计划(即可以从目前版本升级到哪个版本)kubectlversion#匹配......
  • k8s部署 harbor
    1.创建Harbor的命名空间:kubectlcreatensharbor2.创建harbor秘钥主harbor秘钥mkdir-p/home/master/harbor_crtcd/home/master/harbor_crt##获得证书opensslreq-newkeyrsa:4096-nodes-sha256-keyoutca.key-x509-days3650-outca.crt-subj"/C=CN/ST=Guan......
  • k8s部署nginx+php+mysql
    mysql部署参考我之前文档一.hostPath创建项目1.编辑dockerfilevidockerfileiFROMdocker.io/openshift/base-centos7:latest#MAINTAINERfeiyu"[email protected]"RUNyummakecacheRUNyum-yinstallphp-fpmphpphp-gdphp-mysqlphp-mbstringphp-xmlphp-mcryptphp-im......
  • k8s部署mysql 5.7
    1.创建秘钥#创建秘钥kubectlcreatesecretgenericmysql-root-password--from-literal=password=1234562.创建pvc#查看sc[root@k8s-master01mysql]#kubectlgetscNAMEPROVISIONERRECLAIMPOLICYVOLUMEBINDINGMODEALLOWVOLUMEEXPA......
  • k8s安装rook-ceph1.8
    前提Kubernetes集群各节点主机安装lvm2软件:yum-yinstalllvm2Kubernetes集群各节点主机内核版本不低于4.17Kubernetes集群有至少3个工作节点(master和worker),且每个工作节点都有一块初系统盘以外的未格式化的裸盘(工作节点是虚拟机时,未格式化的裸盘可以是虚拟磁盘),用于创......
  • sealos 离线安装k8s
    目录1.修改主机名2.添加主机名与IP地址解析3.升级服务器内核,时间同步,关闭防火墙,重启服务器4.sealos安装5.离线环境安装,离线环境只需要提前导入镜像5.1加载离线包部署6.kubernetes集群可用性验证7.扩展安装8.sealos版本3.3-基本命令1.修改主机名hostnamectlset-hostnamek8s-m......
  • CKA考试总结
    目录一.自己的踩坑二.重点1.时间选择:国内的上午考试,我选择的8.30考试,买了VPN,在家里考试的,网络还比较稳定2.软件卸载:电脑卸载掉虚拟化的工具(VMwarevSphere),不然无法安装PSI考试工具3.手机前期翻译4d.摄像头清晰度考试后总结一.自己的踩坑第一次考试由于点错了左上角第二个按......
  • K8S错误整理
    目录1.calico-node报错Readinessprobefailed:calico/nodeisnotready:BIRDisnotready2.error:MetricsAPInotavailablea.k8s版本:v1.24.4b.k8s1.203.Unabletoupdatecniconfig:nonetworksfoundin/etc/cni/net.d 1.calico-node报错Readinessprobefailed:ca......
  • cka-moni
    1.任务权重:1%kubectl您可以通过上下文从主终端访问多个集群。将所有这些上下文名称写入/opt/course/1/contexts.接下来写一个显示当前上下文的命令进去/opt/course/1/context_default_kubectl.sh,该命令应该使用kubectl。最后将做同样事情的第二个命令写入/opt/course/1/context_def......