CKAD模拟题:1-CronJob
题目要求1.创建一个名为 ppi 并执行一个运行以下单一容器的 Pod 的 CronJob
123- name: pi image: perl:5 command: ["perl", " Mbignum=bpi", " wle", "print bpi(2000)"]
CronJob配置 为:
每隔 5 分钟执行一次
保留 2 个已完成的 Job
保留 4 个失败的 Job
永不重启 Pod
在 8 秒后终止 Pod
2.为测试目的,从 CronJob ppi 中 手动创建并执行一个名为 ppi-test 的 Job 。
job完成与否不重要
参考https://kubernetes.io/zh-cn/docs/tasks/job/automated-tasks-with-cron-jobs/
https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/job/
cronjob定时与Linux的定时任务语法一致
1234567 ...
使用kubeadm部署kubernetes v1-29-2集群
0.准备最近准备开始考CKAD,之前考过了CKA,CKS,但环境有些陈旧了,现在最新版考试需要v1.29了。所以重新使用kubeadm部署一套最新版本kubernetes集群v1.29.2,用于练习模拟题。
1234567891011121314151617181920211.虚拟机环境VirtualBox6.1Linux :ubuntu20.04.3CPU 2C Memory 2G2.集群中节点网络互通3.禁用swapsudo swapoff -asudo sed -ri 's/.*swap.*/#&/' /etc/fstab4.允许 iptables 检查桥接流量cat <<EOF | sudo tee /etc/modules-load.d/k8s.confbr_netfilterEOFlsmod | grep br_netfiltersudo modprobe br_netfiltercat <<EOF | sudo tee /etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-ip6 ...
Ingress域名迁移后出口流量突增
背景某个集群需要进行资源整合下线,需要对集群上业务进行迁移,但在迁移某个带域名容器服务后,发现网络出口带宽升高了70%,域名带宽也一样增高。
ingress: 0.32.0 迁移到 ingress :1.1.3
kubernetes: 1.17.9 迁移到 kubernetes: 1.22.14
问题描述1、域名出口带宽和机房出口带宽都同步增加了1G多,但请求量,Qps:~ 8k/s,没什么变化;域名状态也正常;业务也方反馈也没有出现明显异常。
2、迁移前后ingress-nginx-controller 版本是有一个升级的,0.32.0 – > 1.1.3
根因分析1、整个域名请求拓扑如下所示
xxx.ljohn.cn – > F5 – > BFE(负载均衡) – > Ingress – > 容器pod
2、排查发现域名相应的body长度有所增加,同一个接口长度增加3倍,怀疑跟gzip压缩有关
3、于是联系最前端负载均衡是否有gzip压缩,从BFE负载均衡侧查询到是没有开启。
4、再然后查询ingress侧是否有开启gzip,发现老的ingr ...
记一次ingress重启导致异常分析
环境信息
os: centos7.9
kernel:3.10.0-1160.59.1.el7.x86_64
k8s:v1.17.16
nginx-ingress-controller:0.32.0
问题描述1、2023.7.13,下午接到监控同学反馈部分网关域名14:00有少量请求耗时大于500ms。初步查看所有异常域名均指向在一个网关专有容器集群中。
2、查看ingress该时间点出现过配置reload,并且看到有个 ingress pod重启过。
根因分析1、从如上问题描述和现象来看,正常nginx 或者ingress 配置reload 都是热更新,不应该存在阻塞,导致重启。
于是查看该容器详情如下:kubectl -n ingress-nginx describe pod ingress-nginx-controller-864979f685-clfqw
2、查看容器重启前日志:kubectl -n ingress-nginx logs -p ingress-nginx-controller-864979f685-clfqw
从pod最后14:02 日志来看,ingre ...
2022CKS安全认证模拟题
环境
版本:Kubernetes 1.23
系统:ubuntu20.04
Question 1 | Contexts
Task weight: 1%
You have access to multiple clusters from your main terminal through kubectl contexts. Write all context names into /opt/course/1/contexts, one per line.
From the kubeconfig extract the certificate of user restricted@infra-prod and write it decoded to /opt/course/1/cert.
解答:
12345# 1.很简单获取所有集群的上下文名称kubectl config get-contexts --no-headers | awk '{print $2}' > /opt/course/1/contexts# 2.使用(kubectl ...
Hexo 分类和标签
一、主题配置打开打开 themes/next/_config.yml 主题配置文件 找到 Menu Settings ,把 categories 和 tags 取消注释。
12tags: /tags/ || fa fa-tagscategories: /categories/ || fa fa-th
二、添加分类模块新建一个分类页面。$ hexo new page categories你会发现你的source文件夹下有了categories[index.md](http://index.md/),打开index.md文件将 title 设置为title: 分类
把文章归入分类只需在文章的顶部标题下方添加categories字段,即可自动创建分类名并加入对应的分类中
三、添加标签模块新建一个标签页面 。$ hexo new page tags你会发现你的source文件夹下有了tags[index.md](http://index.md/),打开index.md文件将 title 设置为title: 标签把文章添加标签只需在文章的顶部标题下方添加tags字段,即可自动创建标签名并归 ...
Kubernetes容器网络
容器是什么容器其实是一种沙盒技术。顾名思义,沙盒就是能够像一个集装箱一样,把你的应用“装”起来的技术。这样,应用与应用之间,就因为有了边界而不至于相互干扰;而被装进集装箱的应用,也可以被方便地搬到任何地方运行。对于大多数如Docker、RKT,等Linux容器,其实就是利用Linux Namespace技术创建隔离的进程空间、文件系统、网络命名空间、用户空间、主机名的一组进程。
所以说,容器,其实是一种特殊的进程而已。
一个“容器”,实际上是一个由 Linux Namespace、Linux Cgroups 和 rootfs 三种技术构建出来的进程的隔离环境。
容器优势
开销更少,无需像虚拟化一样虚拟完整的内核以及初始化环境,和启动一些多余的系统进程。
可移植性强,容器可以轻松在不同平台移植,如直接运行docker run -d --name nginx -p 80:80 nginx
高效率,开发打完包构建容器后,可以更快部署,发布
敏捷开发,更快的移植,无需担心依赖的环境不一致的问题
….
Kebernetesk8s 是什么?为什么要引入 k8s,kubernetes 其实是goo ...
Go语言基础之接口
接口(interface)定义了一个对象的行为规范,只定义规范不实现,由具体的对象来实现规范的细节。
接口接口类型在Go语言中接口(interface)是一种类型,一种抽象的类型。
interface是一组method的集合,是duck-type programming的一种体现。接口做的事情就像是定义一个协议(规则),只要一台机器有洗衣服和甩干的功能,我就称它为洗衣机。不关心属性(数据),只关心行为(方法)。
为了保护你的Go语言职业生涯,请牢记接口(interface)是一种类型。
为什么要使用接口1234567891011121314type Cat struct{}func (c Cat) Say() string { return "喵喵喵" }type Dog struct{}func (d Dog) Say() string { return "汪汪汪" }func main() { c := Cat{} fmt.Print ...
Go语言基础之map
Go语言中提供的映射关系容器为map,其内部使用散列表(hash)实现。
mapmap是一种无序的基于key-value的数据结构,Go语言中的map是引用类型,必须初始化才能使用。
map定义Go语言中 map的定义语法如下:
1map[KeyType]ValueType
其中,
KeyType:表示键的类型。
ValueType:表示键对应的值的类型。
map类型的变量默认初始值为nil,需要使用make()函数来分配内存。语法为:
1make(map[KeyType]ValueType, [cap])
其中cap表示map的容量,该参数虽然不是必须的,但是我们应该在初始化map的时候就为其指定一个合适的容量。
map基本使用map中的数据都是成对出现的,map的基本使用示例代码如下:
12345678func main() { scoreMap := make(map[string]int, 8) scoreMap["张三"] = 90 scoreMap["小明"] = 100 fmt.Println(scoreMap) ...
Go语言基础之结构体
Go语言中没有“类”的概念,也不支持“类”的继承等面向对象的概念。Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性。
类型别名和自定义类型自定义类型在Go语言中有一些基本的数据类型,如string、整型、浮点型、布尔等数据类型, Go语言中可以使用type关键字来定义自定义类型。
自定义类型是定义了一个全新的类型。我们可以基于内置的基本类型定义,也可以通过struct定义。例如:
12//将MyInt定义为int类型type MyInt int
通过type关键字的定义,MyInt就是一种新的类型,它具有int的特性。
类型别名类型别名是Go1.9版本添加的新功能。
类型别名规定:TypeAlias只是Type的别名,本质上TypeAlias与Type是同一个类型。就像一个孩子小时候有小名、乳名,上学后用学名,英语老师又会给他起英文名,但这些名字都指的是他本人。
1type TypeAlias = Type
我们之前见过的rune和byte就是类型别名,他们的定义如下:
12type byte = uint8type rune = int32
类型定义和类型 ...