手把手带你过CNCF CKA考试 (第一章)

先说心得

  1. 每道题请务必看是否需要执行kubectl config use-context k8s来加载环境变量,只有少部分的题不需要加载环境变量(因为可能用的是上一题的环境).环境变量名称大部分是 hk8s mk8s等等.环境变量会直接导致你答案的准确性.
  2. 不会的题可以点击左下侧按钮记性 flag 标记等全部完成后再回来做题(再次提醒如果是这种情况也要务必记得重新加载本题的环境变量)
  3. 故障排查问题/集群升级问题 需要进入对应节点 提权至root权限后进行配置,等本题操作完成后,务必记得退出到student(本地)的控制台再进行下一题,(需要退出两次,第一次是退出到非root账户,第二次是退出对应节点ssh)
  4. 考试时允许开启最多一个tab页面来查阅文档,可以提前在收藏夹里把一些重点文档保存下来方便查阅(.io的搜索系统有时候不好用需要多请求几次)

考试大纲

下面我来按照考试大纲分享一下最新的2021年五月的考题及重点难点.

25% - Cluster Architecture, Installation & Configuration

• Manage role based access control (RBAC)
• Use Kubeadm to install a basic cluster
• Manage a highly-available Kubernetes cluster
• Provision underlying infrastructure to deploy a Kubernetes cluster
• Perform a version upgrade on a Kubernetes cluster using Kubeadm
• Implement etcd backup and restore


• RBAC的管理 参考文档
Rolebinding不能跨namespace, ClusterRolebinding可以跨namespace,考察RBAC,要求创建指定namespace下的serviceAccount,并创建Role/ClusterRole,绑定serviceAccount。要求指定的sa对指定namespace有创建pod的权限(如果是对整个集群的话,需要用ClusterRoleBinding)

# 创建一个namespace
kubectl create namespace app-team1
# 创建一个serviceaccount 到 app-team1 这个namespace下面 名称是cicd-token
kubectl -n app-team1 create serviceaccount cicd-token
# 创建一个跨集群的绑定关系
kubectl -n app-team1 create rolebinding cicd-token-binding --clusterrole=deployment-clusterrole --serviceaccount=app-team1:cicd-token
# 查看这个绑定关系
kubectl -n app-team1 describe rolebindings.rbac.authorization.k8s.io cicd-token-binding

• 使用Kubeadm 安装基础集群 参考文档
现在基本上都是可以通过yum/apt等直接安装kubeadm,考试应该是debian 所以使用apt-get 安装kubeadm工具.安装完后直接执行kubeadm init即可


• 管理高可用的k8s集群 参考文档
考试一般都会提供你k8s环境 你直接use 环境变量即可引用相关内容,在这里不做过多介绍.部署一个高可用的集群优先要保证各个节点的etcd都在运行后参考文档链接即可完成部署.


• 部署一个k8s集群 参考文档

你也可以通过下面的命令来安装

#!/bin/bash

# Disable Swap
sudo swapoff -a

# Bridge Network
sudo modprobe br_netfilter
sudo cat <<'EOF' | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system

# Install Docker
sudo curl -fsSL https://get.docker.com -o /home/ubuntu/get-docker.sh
sudo sh /home/ubuntu/get-docker.sh

# Install Kube tools
sudo apt-get update && sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<'EOF' | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

Optionally, add sudo kubeadm config images pull to the end of the script to pre-pull images required for setting up a Kubernetes cluster.

$ sudo kubeadm config images pull

[config/images] Pulled k8s.gcr.io/kube-apiserver:v1.19.2
[config/images] Pulled k8s.gcr.io/kube-controller-manager:v1.19.2
[config/images] Pulled k8s.gcr.io/kube-scheduler:v1.19.2
[config/images] Pulled k8s.gcr.io/kube-proxy:v1.19.2
[config/images] Pulled k8s.gcr.io/pause:3.2
[config/images] Pulled k8s.gcr.io/etcd:3.4.13-0
[config/images] Pulled k8s.gcr.io/coredns:1.7.0

• 使用kubeadm 升级集群
升级集群以及维护节点必备的2个前置动作就是先通过cordon命令把预操作的节点状态置成"停止调度"(SchedulingDisabled)以及通过drain命令将跑在上面的pod调度到其他node上后,再进行对node的其他运维操作.
apt-get install kubeadm
kubeadm version
kubeadm upgrade plan
kubeadm upgrade apply v1.19.0

kubectl config use-context mk8s
kubectl get node
kubectl cordon mk8s-master-1
kubectl drain mk8s-master-1 --delete-local-data --ignore-daemonsets --force
ssh mk8s-master-1
sudo -i
apt-get install -y kubeadm=1.19.0-00
kubeadm version 
kubeadm upgrade plan
kubeadm upgrade apply v1.19.0 --etcd-upgrade=false
apt-get install kubelet=1.19.0-00 kubectl=1.19.0-00
kubelet version
kubelet version
systemctl status kubelete
systemctl daemon-reload
exit
exit
kubectl get node #  确认只升级了master节点到1.19.0

• 熟练掌握etcd的备份和还原 参考文档
先输出ETCDCTL_API=3的环境变量,
熟练掌握各种子命令

  1. --endpoints etcd连接地址
  2. --cacert ca公钥
  3. --cert 客户端证书
  4. --key 客户端私钥
  5. save 保存 restore恢复
export ETCDCTL_API=3  # 设置API版本v3
etcdctl --endpoints 127.0.0.1:2379 --cacert=/opt/KUIN00601/ca.crt --cert=/opt/KUIN00601/etcd-client.crt --key=/opt/KUIN00601/etcd-client.key snapshot save /srv/data/etcd-snapshot.db
上一篇:信息加速累积下 医疗大数据存在的几种潜在变现能力


下一篇:聊聊Java动态代理(上)