CentOS7安装基于BPF的bcc-tools系统性能工具库
准备
OS版本:CentOS7.6.1810
内核版本:5.4.207-1.el7.elrepo.x86_64
依赖包:1234567#内核依赖包rpm -qa | grep kernel-ltkernel-lt-tools-5.4.207-1.el7.elrepo.x86_64kernel-lt-tools-libs-5.4.207-1.el7.elrepo.x86_64kernel-lt-devel-5.4.207-1.el7.elrepo.x86_64kernel-lt-5.4.207-1.el7.elrepo.x86_64kernel-lt-headers-5.4.207-1.el7.elrepo.x86_64
安装内核必须升级到4.x版本以上,才可以使用。我的内核版本已经升级过,具体升级内核过程这里不展开,建议使用elrepo 安装高版本内核。
12345678910111213#安装bcc-toolsyum install -y bcc-tools#添加环境变量export PATH=$PATH:/usr/share/bcc/tools# 测试#cachestat ...
CKAD模拟题:2-CronJob
题目要求
在清单文件 /ckad/CKAD00016/periodic.yaml 中定义此 Pod
在一个 busybox:stable 容器中运行命令 date 该命令必须每分钟运行一次,并且必须在 10 秒内完成运行,或者被 Kubernetes 终止运行。注意: CronJob 名称和容器名称都必须为 hello
在上述清单文件中创建此资源,并验证此 Job 至少成功执行一次。
参考https://kubernetes.io/zh-cn/docs/tasks/job/automated-tasks-with-cron-jobs/
https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/job/
解答123456789101112131415161718192021222324252627282930313233343536373839404142# 1.编辑文件vim /ckad/CKAD00016/periodic.yaml# 2.根据要求编辑文件内容apiVersion: batch/v1kind: C ...
CKAD模拟题:7-金丝雀部署
题目要求namespace goshawk 中名为 chipmunk-service 的 Service 指向名为 current-chipmunk-deployment 的 Deployment 创建的 5 个 Pod
你可以在 /ckad/goshawk 中找到 current-chipmunk-deployment 的清单文件。
在同一 namespace 中创建一个 相同的 Deployment 名为 canary-chipmunk-deployment
修改 Deployment 以便
在 namespace goshawk 中运行的 Pod 的最大数量为 10 个
chipmunk.service 流量的 40% 流向 Pod canary-chipmunk-deployment
参考https://kubernetes.io/zh-cn/docs/concepts/cluster-administration/manage-deployment/#canary-deployments
解答123456789101112131415161718192021222 ...
Kubernetets CPU绑核配置
CPU绑核配置默认情况下,kubelet 使用 CFS 配额 来执行 Pod 的 CPU 约束。 当节点上运行了很多 CPU 密集的 Pod 时,工作负载可能会迁移到不同的 CPU 核, 这取决于调度时 Pod 是否被扼制,以及哪些 CPU 核是可用的。许多应用对这种迁移不敏感,因此无需任何干预即可正常工作。有些应用对CPU敏感,CPU敏感型应用有如下特点。
对CPU throttling 敏感
对上下文切换敏感
对处理器缓存未命中敏感
对跨socket内存访问敏感
期望运行在同一物理CPU的超线程
如果您的应用有以上其中一个特点,可以利用kubernetes中提供的绑核策略去给应用绑核,提升应用性能,减少应用的调度延迟。cpu manager会优先在一个Socket上分配资源,也会优先分配完整的物理核,避免一些干扰。
如何为Pod绑核想要让Pod能够绑核,有如下几点要求:
节点上开启静态绑核策略。
Pod的定义里都要设置request和limits,request和limits要一致。
对于要绑核的容器,request值必须是整数。
如果有init container希望进行绑 ...
kubelet统计磁盘inode耗时导致负载升高问题
问题描述1、磁盘容量告警
2、对主机进行磁盘检查并尝试清理磁盘占用较高的pod,有5900多个文件描述符被打开没有关闭。
通过平台删除该pod: product-center-query-pro-remain-5bfb5f4c98-m2l55
3、主机负载冲高,触发告警
根因排查1、根据系统日志发现磁盘最早在5月28日就出现了磁盘inode统计超时情况。
2、发现有个容器在/tmp目录创建了很多小文件,占用了大量的磁盘空间及Inode,可能是导致磁盘响应变慢的直接原因。
解决方案
立即对主机进行疏散,避免再次出现异常,导致主机负载升高,影响业务pod。
增加该kubelet日志告警(fs: disk usage and inodes count on following dirs took 1),提前发现及时人工介入进行处理。
CKAD模拟题:28-Jobs
题目要求
用执行命令**’date; echo Hello from the Kubernetes cluster’**的镜像 busybox ,创建一个名为 busybox-job 的 Job 。
修改此 Job ,确保在执行时间超过 3000 秒后,kubernetes 会自动终止该 Job。
如果容器失败,则尝试重启容器,但最多尝试重启 5 次。
检查此Job的日志
参考https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/job/
12345678910111213141516# 参考命令kubectl explain job.spec# 配置示例apiVersion: batch/v1kind: Jobmetadata: name: pispec: template: spec: containers: - name: pi image: perl:5.34.0 command: ["perl", "-Mbign ...
CKAD模拟题:27-Secret 秘钥
题目要求在 test 命名空间,创建一个名为 mysecret 的密钥,其值 username 为 devuser 和 password为A!B*d$zDsb= 在 test 命名空间,创建一个 pod,镜像使用 nginx:1.16 ,名字为 mypod ,将秘密 mysecret 挂载到路径 /etc/foo 上的卷中
参考https://kubernetes.io/zh-cn/docs/tasks/configmap-secret/managing-secret-using-kubectl/
https://kubernetes.io/zh-cn/docs/concepts/configuration/secret/#using-secrets-as-files-from-a-pod
解答123456789101112131415161718192021222324252627282930# 创建一个namespacekubectl create ns **test# 创建秘钥配置echo -n 'devuser' > ./username.txtech ...
CKAD模拟题:26-SecurityContext 安全上下文
题目要求在 test 命名空间,有一个名为 secnginx 的 pod,修改此 pod,为容器添加CAP_NET_ADMIN 和 CAP_SYS_TIME 权能
参考https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/security-context/#set-capabilities-for-a-container
123456789101112# 参考apiVersion: v1kind: Podmetadata: name: security-context-demo-4spec: containers: - name: sec-ctx-4 image: gcr.io/google-samples/node-hello:1.0 securityContext: capabilities: add: ["NET_ADMIN", "SYS_TIME"]
解答12345678910111213141516171819202122 ...
CKAD模拟题:25-资源配额Quota
题目要求在 qutt 命名空间,创建一个名为 myquota 的 Quota,该资源 Quota 具有 1 个CPU, 1G 内存和 2个 pod的硬限制。
参考https://kubernetes.io/zh-cn/docs/concepts/policy/resource-quotas/#viewing-and-setting-quotas
解答1234567891011121314151617181920212223242526272829# 创建一个nskubectl create ns qutt# 创建一个容器podkubectl create quota myquota --hard=count/pods=2 --namespace=qutt --dry-run=client -o yaml > 25-resource-quota.yaml# 修改配置vim 25-resource-quota.yamlapiVersion: v1kind: ResourceQuotametadata: creationTimestamp: null name: myquota ...
CKAD模拟题:24-sidecar 边车容器
题目要求
在 default 命名空间创建一个 deployment 名为 deploymenb-web
包含一个主容器 lfccncf/busybox:1 ,名称 logger-123
包含一个边车容器 lfccncf/fluentd:v0.12 ,名称 adaptor-dev
在两个容器上挂载一个共享卷 /ckad/log ,当 pod 删除 ,这个卷 不会持久 。
在 logger-123 容器运行以下命令:
123while true; doecho "i luv cncf" >> /ckad/log/input.log; sleep 10;done
结果会文本输出到 /ckad/log/input.log ,格式示例如下:
i luv cncf
i luv cncf
i luv cncf
adaptor-dev 容器读取 /ckad/log/input.log ,并将数据输出到 /ckad/log/output 格式为 Fluentd JSON
请注意 :完成此任务不需要了解 Fluentd , 完成此任务所需要的知识 .从/c ...