ctr crictl nerctl
ctr、crictl概述ctr是containerd自带的CLI命令行工具
crictl是k8s中CRI(容器运行时接口)的客户端,k8s使用该客户端和containerd进行交互
crictl 使用命名空间 k8s.io,即crictl image list = ctr -n=k8s.io image list
containerd 相比于 docker , 多了 namespace 概念, 每个 image 和 container 都会在各自的 namespace 下可见, 目前 k8s 会使用 k8s.io 命名空间
作为接替 Docker 运行时的 Containerd 在早在 Kubernetes1.7 时就能直接与 Kubelet 集成使用,只是大部分时候我们因熟悉 Docker,在部署集群时采用了默认的 dockershim。在V1.24起的版本的 kubelet 就彻底移除了dockershim,改为默认使用Containerd了,当然也使用cri-dockerd适配器来将Docker Engine与 Kubernetes 集成。
可以参考官方文档: ...
github 工作流
github 上的仓库(remote)
仓库的主分支 main (原来叫 master )
假设这个 main branch 上只有一个 commit 是 init
当我们想修改代码/贡献代码的时候,第一件事就是将 remote 仓库复制到本地。
git clone <仓库地址># 其中 local 可以当作是 local git(本地仓库)# disk 是磁盘,这部分是源文件真正在磁盘里的样子,当我们刚进行 clone 的时候,remote、local、disk 都是一样的。
修改代码
# 在我们需要修改代码的时候,首先就是建立一个 branch# 建立一个 branch 会有很多好处,最重要的是不会让你的 主分支 代码不能工作# 建立自己的 branch 对应的命令, 该命令会复制一份branch到你的新branch上。# 当我们新建一个 branch 时,git会把这个branch上的所有文件同步给硬盘,这时硬盘里边保存的所有源代码都是志这个branch 的代码。git checkout -b my-feature
# 当我们修改代码的时 ...
Kubernetes 最佳实践--解决容器内时区不一致问题
背景业务程序在使用时间的时候(比如打印日志),没有指定时区,使用的系统默认时区,而基础镜像一般默认使用 UTC 时间,程序输出时间戳的时候,就与国内的时间相差 8 小时,如何使用国内的时间呢?
方案一:指定 TZ 环境变量很多编程语言都支持 TZ 这个用于设置时区的环境变量,可以在部署工作负载的时候,为容器指定该环境变量,示例:
apiVersion: apps/v1kind: Deploymentmetadata: name: appspec: replicas: 1 selector: matchLabels: app: app template: metadata: labels: app: app spec: containers: - name: app image: app env: # 关键 - name: TZ value: Asia/Shanghai
方案二:Dockerfile 里设置时区下面给出在 ...
ip_forward 与路由转发
一、前言介绍: IP地址分为公有ip地址和私有ip地址,Public Address是由INIC(internet network information center)负责的,这些IP地址分配给了注册并向INIC提出申请的组织机构。Private Address属于非注册地址,专门为组织内部使用。Private Address是不可能直接用来跟WAN通信的,要么利用帧来通信(FRE帧中继,HDLC,PPP),要么需要路由的转发(nat)功能把私有地址转换为公有地址才行。
出于安全考虑,Linux系统默认是禁止数据包转发的。所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将数据包发往本机另一块网卡,该网卡根据路由表继续发送数据包。这通常是路由器所要实现的功能。
二、路由转发的工作原理:
首先内网主机向外网主机发送数据包,由于内网主机与外网主机不在同一网段,所以数据包暂时发往内网默认网关GIP处理,而本网段的主机对此数据包不做任何回应。由于内网主机的SIP是私有的,禁止在公网使用,所以必须将数据包的SIP修改成公网上的可用IP,这就是网关收 ...
配置指定权限的 kubeconfig
背景目标生成一个仅能操作名为demo的namespace的kubeconfig文件,仅给业务用户最小的所需权限。
rbac资源准备创建ServiceAccountcat<< EOF | kubectl apply -f -apiVersion: v1kind: ServiceAccountmetadata: name: demo-account namespace: demoEOF
Secret在 K8s 1.24 版本之后,ServiceAccount 对应的 Secret 就不会自动创建了
# kubectl -n demo get secretNo resources found in demo namespace.
需要我们自己手动创建一下。之前的k8s自动会创建。
cat<< EOF | kubectl apply -f -apiVersion: v1kind: Secretmetadata: name: demo-account-secret namespace: demo annotations: kubernetes.io/s ...
二进制安装 kubernetes v1.21.10
集群环境准备主机规划
主机IP地址
主机名
主机配置
主机角色
软件列表
10.254.16.184
k8s-master1
2C4G
master、worker
kube-apiserver、kube-controller-manager、kube-scheduler、etcd、kubelet、kube-proxy、Containerd、runc
10.254.30.124
k8s-master2
2C4G
master、worker
kube-apiserver、kube-controller-manager、kube-scheduler、etcd、kubelet、kube-proxy、Containerd、runc
10.254.18.125
k8s-master3
2C4G
master、worker
kube-apiserver、kube-controller-manager、kube-scheduler、etcd、kubelet、kube-proxy、Containerd、runc
172.31.38.147
k8s-worker1
2C4G
work ...
kubectl 常用命令
kubectl rollout undo 回退部署
查看当前的 Deployment 状态:
kubectl get deployments
查看指定 Deployment 的历史版本:
kubectl rollout history deployment <deployment-name>
回退到上一个版本:
kubectl rollout undo deployment <deployment-name>
如果您想回退到特定的修订版本,可以使用 --to-revision 选项:
kubectl rollout undo deployment <deployment-name> --to-revision=<revision-number>
Hexo 搜索功能配置
前言本站基于Hexo搭建,用的 🦋 hexo-theme-butterfly 主题 v4.13.0。
Local search
为本地搜索,会生成对应的本地搜索文件,打开页面搜索框时下载该文件,因为存在时延问题这里不推荐该方式
Algolia(推荐)
关于 Algolia 搜索功能,这里有两种插件,一个是 hexo-algolia ,一个是 hexo-algoliasearch。第一种亲测只能对匹配文章title,不能匹配文章内容查询到结果,所以推荐第二种。下面只做推荐的配置。
获取 Algolia 账号
注册 Algolia。进入Sign in | Algolia 注册,也可以直接用Github授权登录。
新建 Index
创建拥有一定权限的api key(如果选择第二种插件,可忽略这一步)。进入【Settings > API Keys】。
进入【All API Keys > API Keys】,点击【New API Key】。在ACL里面增加删除和新增Object的权限(按理说只用这两个权限就行,下图中我多加了几个), ...
helm常用命令
仓库管理### 添加仓库helm repo add [名称] [URL]### 更新仓库helm repo update### 列出仓库helm repo list### 移除仓库helm repo remove [名称]
Chart 操作### 创建新的 Charthelm create [chart名称]### 打包 Charthelm package [chart目录]### 验证 Charthelm lint [chart目录]### 查看 Chart 详情helm show all [chart名称]### 搜索 Charthelm search repo [关键词]### 下载 Chart 指定版本 helm pull <chart> --version <number>
发布管理### 安装 Releasehelm install [release名称] [chart名称]### 安装 Release 指定命名空间并创建helm install <name> <chart> --namespace <namesp ...
prometheus operator 配置 config
prometheus operator 自定义 config链接:prometheus-operator/Documentation/additional-scrape-config.md at · GitHub
prometheus 实例增加如下配置:
# kubectl edit prometheus example-prometheus -n monitoringspec: additionalScrapeConfigs: name: additional-scrape-configs key: prometheus-additional.yaml
prometheus-additional.yaml 配置如下:
- job_name: "prometheus" static_configs: - targets: ["localhost:9090"]
# 生成 secrete config yamlkubectl create secret generic additional-scrape ...