当前位置:主页 > 查看内容

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

发布时间:2021-07-12 00:00| 位朋友查看

简介:先说心得每道题请务必看是否需要执行kubectl config use-context k8s来加载环境变量,只有少部分的题不需要加载环境变量(因为可能用的是上一题的环境).环境变量名称大部分是 hk8s mk8s等等.环境变量会直接导致你答案的准确性.不会的题可以点击左下侧按钮记性……
先说心得每道题请务必看是否需要执行kubectl config use-context k8s来加载环境变量,只有少部分的题不需要加载环境变量(因为可能用的是上一题的环境).环境变量名称大部分是 hk8s mk8s等等.环境变量会直接导致你答案的准确性.不会的题可以点击左下侧按钮记性 flag 标记等全部完成后再回来做题(再次提醒如果是这种情况也要务必记得重新加载本题的环境变量)故障排查问题/集群升级问题 需要进入对应节点 提权至root权限后进行配置,等本题操作完成后,务必记得退出到student(本地)的控制台再进行下一题,(需要退出两次,第一次是退出到非root账户,第二次是退出对应节点ssh)考试时允许开启最多一个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集群 参考文档

创建阿里云ecs实例

使用最小2C2G的debian或者Ubuntu关闭swap,没记错的话阿里云已经帮助关闭了swap swap file.通过上面的模板可以自行创建多个实例.

配置 iptables

通过iptables 查看流量

安装 Docker container runtime

可以通过此脚本安装 docker-install安装 kubeadm, kubelet, and kubectl

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

#!/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
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
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
kubectl get node # 确认只升级了master节点到1.19.0

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

--endpoints etcd连接地址--cacert ca公钥--cert 客户端证书--key 客户端私钥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

本文转自网络,原文链接:https://developer.aliyun.com/article/785203
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文

  • 周排行
  • 月排行
  • 总排行

随机推荐