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

简介: 随着云原生和golang的日渐发展,CKA的普及度也越来越高了.现在市面上均是收费题库.并没有太多整体的复习资料,本人于2021年5月刚刚通过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
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
存储 Kubernetes 调度
k8s常见的排错指南Node,svc,Pod等以及K8s网络不通问题
k8s常见的排错指南Node,svc,Pod等以及K8s网络不通问题
4700 1
|
Kubernetes Cloud Native 调度
云原生|kubernetes|CKA真题解析-------(1-5题)
云原生|kubernetes|CKA真题解析-------(1-5题)
1065 0
|
9月前
|
人工智能 开发者
【阅读十分钟,百分百成功】——通过大模型实现对客服回答的质量评估
本文章基于业务实践,总结有关客服质检场景的解决方案和处理经验,为相似场景提供可行的借鉴方法。
1230 121
|
11月前
|
安全 应用服务中间件 网络安全
Nginx入门 -- 了解Nginx中证书配置
Nginx入门 -- 了解Nginx中证书配置
359 0
|
存储 Linux 调度
OpenStack如何支持虚拟化技术?
【8月更文挑战第21天】
628 0
|
运维 Kubernetes 监控
在K8S中,Kubernetes常见的部署方式有哪些?
在K8S中,Kubernetes常见的部署方式有哪些?
|
11月前
|
监控 Dubbo Java
dubbo学习三:springboot整合dubbo+zookeeper,并使用dubbo管理界面监控服务是否注册到zookeeper上。
这篇文章详细介绍了如何将Spring Boot与Dubbo和Zookeeper整合,并通过Dubbo管理界面监控服务注册情况。
755 0
dubbo学习三:springboot整合dubbo+zookeeper,并使用dubbo管理界面监控服务是否注册到zookeeper上。
ly~
|
11月前
|
供应链 搜索推荐 大数据
大数据在零售业中的应用
在零售业中,大数据通过分析顾客的购买记录、在线浏览习惯等数据,帮助零售商理解顾客行为并提供个性化服务。例如,分析网站点击路径以了解顾客兴趣,并利用历史购买数据开发智能推荐系统,提升销售和顾客满意度。此外,大数据还能优化库存管理,通过分析销售数据和市场需求,更准确地预测需求,减少库存积压和缺货现象,提高资金流动性。
ly~
1020 2
|
监控 Ubuntu Linux
在Linux中,如何使用Pacemaker和Corosync?
在Linux中,如何使用Pacemaker和Corosync?
|
数据库 数据安全/隐私保护 数据库管理
QT中sqlite数据库数据加密/混淆---MD5/SHA1/SHA2/SHA3
QT中sqlite数据库数据加密/混淆---MD5/SHA1/SHA2/SHA3