【DevOps基础篇之k8s】如何通过Kubernetes CKA认证考试

2019-09-10T13:11:33+08:00 | 4分钟阅读 | 更新于 2019-09-10T13:11:33+08:00

Macro Zhao

【DevOps基础篇之k8s】如何通过Kubernetes CKA认证考试

@TOC

推荐超级课程:

核心概念

查看 dev namespace下的资源:

kubectl get pods -n dev

查看所有 namespaces 下的pod:

kubectl get pods -A

查看所有namespace下的所有资源:

kubectl get all -A

生成一个pod yaml,其中镜像用: nginx image 并且加上标签 label env=prod:

kubectl run nginx --image=nginx --labels=env=prod --dry-run=client -o yaml > nginx_pod.yaml

快速删除 pod nginx:

kubectl delete pod nginx --grace-period 0 --force

生成一个 Deployment yaml file:

kubectl create deploy --image=nginx nginx --dry-run=client -o yaml > nginx-deployment.yaml

访问一个在devnamespace下的名为 test-service的service:

test-service.dev

创建一个 pod valid-pod, 并使用端口 444,名称为 frontend:

kubectl expose pod valid-pod --port=444 --name=frontend

用yaml重建一个pod:

kubectl replace --force -f nginx.yaml

编辑 deployment nginx:

kubectl edit deploy nginx

设置 deployment nginx的image版本:

kubectl set image deploy nginx nginx=nginx:1.18

伸缩 deployment nginx到4并进行record action:

kubectl scale deploy nginx --repliacs=4 --record

获取当前namespace下的event:

kubectl get events

通过标签获取pod:

kubectl get pods --show-labels

获取标签为env=dev的pod :

kubectl get pods -l env=dev

获取node node01的taint:

kubectl describe node node01 | grep -i Taints:

给node node01 加上标签 size=small:

kubectl label nodes node01 size=small

默认静态pod路径是:

/etc/kubernetes/manifests

查看pod的log:

kubectl logs nginx

查看多个pod的日志:

kubectl logs <pod_name> -c <container_name>

资源监控

查看node的资源使用:

kubectl top node

查看pod和其中container的资源使用率:

kubectl top pod --containers=true

生命周期管理

查看 deployment app的rollout状态:

kubectl rollout status deployment/app

查看deployment app的rollout历史:

kubectl rollout history deployment/app

撤销 rollout:

kubectl rollout undo deployment/app

创建 configmap app-config 并添加 env=dev:

kubectl create configmap app-config --from-literal=env=dev

创建 secret app-secret 并添加 pass=123:

kubectl create secret generic app-secret --from-literal=pass=123

Cluster维护

销毁 node node01:

kubectl drain node01

使node进入可用状态:

kubectl uncordon node01

升级集群的 kubeadm:

kubeadm upgrade plan
apt-get upgrade -y kubeadm=1.18.0-00
kubeadm upgrade apply v1.18.0
apt-get upgrade -y kubelet=1.18.0-00
systemctl restart kubelet

Backup etcd:

export 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 /tmp/etcd-backup.db

Restore etcd:

ETCDCTL_API=3 etcdctl snapshot restore /tmp/etcd-backup.db --data-dir /var/lib/etcd-backup

在编辑/etc/kubernetes/manifests/etcd.yaml 之后, 更改文件 /var/lib/etcd/var/lib/etcd-backup.

安全认证

创建 service account sa_1

kubectl create serviceaccount sa_1

查看 kube-apiserver certificate:

openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text -noout

承认用户 john的证书认证:

kubectl certificate approve john

查看 kubeconfig :

kubectl config view

查看当前context:

kubectl config current-context

使用 context dev-user@dev:

kubectl config use-context prod-user@production

验证用户john是否可以创建 deployments:

kubectl auth can-i create deployments --as john

创建 role dev并使其可以创建 secrets:

kubectl create role dev --verb=create --resource=secret

绑定 role dev 到 user john:

kubectl create rolebinding dev-john --role dev --user john

查看 namespaced 资源:

kubectl api-resources --namespaced=true

问题排查

查看 kube-system 相关的 pods:

kubectl get pods -n kube-system

查看所有node状态是否ready:

kubectl get nodes

查看node的磁盘,内存状况:

df -h
top

查看 kubelet 服务状况:

systemctl status kubelet

查看 kubelet service logs:

sudo journalctl -u kubelet

查看 kubelet service 详细信息:

ps -aux | grep kubelet

查看 cluster 信息:

kubectl cluster-info

查看 pod CIDR:

kubectl describe node | less -p PodCIDR

获取所有pod并按照时间排序:

kubectl get pod -A --sort-by=.metadata.creationTimestamp

查找 node-master的CIDR:

ssh node0master
cat /etc/kubernetes/manifests/kube-apiserver.yaml | grep range

查找在node-master上用的CNI插件:

ls /etc/cni/net.d/

查找event并按照时间排序:

kubectl get events -A --sort-by=.metadata.creationTimestamp

查看所有node的内部IP:

kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="InternalIP")].address}'

其他

  • 为了创建daemonset, 使用 kubectl create deploy 命令创建一个 .yaml文件,然后更改 kind,删除 replicas & strategy.
  • 为了查找static pod manifest 路径, 查看命令 kubelet service 或者kubelet配置文件的 staticPodPath参数。
  • 为了创建static pod, 需要把yaml文件放在staticPodPath 目录.
  • 可通过pod名称后缀 -<node_name>来识别其是否为static pod。
  • 为了添加新的 scheduler,复制文件,并在container的command中加入--leader-elect=false & --scheduler-name=my-scheduler-name.
  • 在pod的specschedulerName定义指定要使用的scheduler.
  • 通过pod的 command来覆盖默认的ENTRYPOINT . 使用 args覆盖Dockerfile 中的CMD参数。

© 2011 - 2025 Macro Zhao的分享站

关于我

如遇到加载502错误,请尝试刷新😄

Hi,欢迎访问 Macro Zhao 的博客。Macro Zhao(或 Macro)是我在互联网上经常使用的名字。

我是一个热衷于技术探索和分享的IT工程师,在这里我会记录分享一些关于技术、工作和生活上的事情。

我的CSDN博客:
https://macro-zhao.blog.csdn.net/

欢迎你通过评论或者邮件与我交流。
Mail Me

推荐好玩(You'll Like)
  • AI 动·画
    • 这是一款有趣·免费的能让您画的画中的角色动起来的AI工具。
    • 支持几十种动作生成。
我的项目(My Projects)
  • 爱学习网

  • 小乙日语App

    • 这是一个帮助日语学习者学习日语的App。
      (当然初衷也是为了自用😄)
    • 界面干净,简洁,漂亮!
    • 其中包含 N1 + N2 的全部单词和语法。
    • 不需注册,更不需要订阅!完全免费!
  • 小乙日文阅读器

    • 词汇不够?照样能读日语名著!
    • 越读积累越多,积跬步致千里!
    • 哪里不会点哪里!妈妈再也不担心我读不了原版读物了!
赞助我(Sponsor Me)

如果你喜欢我的作品或者发现它们对你有所帮助,可以考虑给我买一杯咖啡 ☕️。这将激励我在未来创作和分享更多的项目和技术。🦾

👉 请我喝一杯咖啡

If you like my works or find them helpful, please consider buying me a cup of coffee ☕️. It inspires me to create and share more projects in the future. 🦾

👉 Buy me a coffee