k8s record 20240703

1. containerd

它不用于直接和开发人员互动,在这方面不和docker竞争




containerd的用时最短,性能最好。

containerd 是容器的生命周期管理,容器的网络管理等等,真正让容器运行需要runC

containerd 是一个独立的容器运行时,专注于容器的生命周期管理,包括镜像管理、容器执行和监督。containerd 是 Docker 的底层组件之一,但也可以独立使用。

docker-shim 是 Docker 的一个内部组件,主要用于 Docker 作为 Kubernetes 容器运行时接口(CRI)时的适配层。docker-shim 是 Kubernetes 为支持 Docker 而实现的适配层,将逐渐被弃用,推荐使用直接支持 CRI 的运行时,如 containerd。

docker-cli 通过 Docker API 与 Docker 守护进程通信,而 Docker 守护进程再调用 containerd 来执行具体的容器操作。

使用ctr 操纵 容器

Docker 在 /var/lib/docker 目录下管理和存储镜像。

Docker Daemon 处理所有的镜像操作,例如拉取、推送、删除等,通过 Docker CLI(docker 命令)进行管理。

containerd 在 /var/lib/containerd 目录下管理和存储镜像。

containerd 提供自己的 CLI 工具 ctr 来管理镜像。

bash 复制代码
ctr images ls
ctr images pull docker.m.daocloud.io/library/nginx:alpine

Docker 的本地镜像存储和 containerd 的本地镜像存储是独立的,不共享数据。

使用 docker pull 拉取的镜像存储在 Docker 的存储目录中,供 Docker 使用。/var/lib/docker

使用 ctr pull 或 crictl pull 拉取的镜像存储在 containerd 的存储目录中,供 containerd 使用。/var/lib/containerd
ctr 是一个低级别的工具,直接与 containerd 交互,提供了详细的控制和调试功能,适合高级用户和开发者。

crictl 是一个高层次的工具,基于 CRI 标准,主要用于 Kubernetes 环境,通过统一的命令集管理不同的容器运行时,适合系统管理员和 Kubernetes 用户。

create还得两步,不如一步 ctr run直接静态容器创建并且变成动态容器

ctr 对接 harbor

修改 /etc/containerd/config.toml文件 加入私有地址

namespace

不同的namespace,即使容器名相同,也不要紧。

可以运行容器指定namespace

其他namespace的镜像用不了,必须自己的namespace 里有

containerd Network

  1. 创建CNI 网络,即容器网络
    github获取安装它俩。在github搜索---打开右边的release,然后复制网络连接,在服务器上wget + 网络链接

    现在宿主机上创建网桥。然后所有的容器都可以通过这个网桥与外界通信
  2. 为容器配置网络功能

    用插件就这样给它加上网络功能了,进到容器里它就多了一个网卡

持久化存储

容器可以挂载到宿主机目录

containerd 的缺陷

它不能bulid,commit等等。

docker帮助实现容器管理

2. 日志

ELK 集群部署

  1. https://www.elastic.co/cn/elasticsearch

  2. 收集 k8s 节点系统日志需要 filebeat. Filebeat 在ELK堆栈中负责收集和转发日志数据

    需要收集那个节点的日志就在哪安装 filebeat

  3. 收集节点应用程序日志,就是物理机运行的程序

    收集机器上这两处日志(注意上图划线这里的路径是容器里的路径,是挂载的物理机相同的路径) 给logstash

    Filebeat -> Logstash -> Elasticsearch。Filebeat 收集日志并发送到 Logstash,Logstash 处理数据后发送到 Elasticsearch 进行存储和索引。

Logstash 提供了强大的过滤插件,允许用户对数据进行复杂的处理和转换,包括:

解析:从原始数据中提取有用的信息,例如解析 JSON、CSV、XML 等格式的数据。

转换:修改数据内容,例如添加或删除字段,格式化时间戳等。

增强:通过查找、计算等方式添加更多有用的信息,例如通过地理IP数据库添加地理位置信息。

清洗:去除无用的数据,过滤掉不需要的日志条目。

下面是logstash 配置文件

  1. 收集pod日志

一个pod多个容器,filebeat作为边车容器从共享存储(两容器都挂一个目录)中取走工作容器的日志

EFK

ELK部署需要单独主机,但是EFK可以部署到 k8s 内

logstash是java开发的

缓存和高可用有啥不懂的

3. 监控

通过helm部署 Prometheus

  1. metallb-system 用来提供负载均衡服务
  2. ingress-nginx 用来从外部对Prometheus和 grafana的管理
  3. helm安装到物理机,helm install prometheus 到 k8s,此时 grafana 也一块装好了
  4. 对 k8s 做了哪些监控,通过 Prometheus 网站查看。grafana数据展示
  5. ingress的用处,向外面暴露 Prometheus和 grafana的域名。


    通过在笔记本上配置host,用上面这个ip

    同一ip 对应两个域名就是 ingress-nginx反向代理的作用

监控redis,redis也是通过helm部署



先要部署 redis-exporter,也就是探针。然后创建svc,通过标签与 探针发生联系

创建一个ServiceMonitor被 Prometheus 发现,自动对 ServiceMonitor的 svc 监控,里面有redis相关的数据记录

监控mysql

yaml 文件部署mysql

部署 mysql exporter

相关推荐
全能全知者1 小时前
docker快速安装与配置mongoDB
mongodb·docker·容器
为什么这亚子3 小时前
九、Go语言快速入门之map
运维·开发语言·后端·算法·云原生·golang·云计算
ZHOU西口4 小时前
微服务实战系列之玩转Docker(十八)
分布式·docker·云原生·架构·数据安全·etcd·rbac
牛角上的男孩5 小时前
Istio Gateway发布服务
云原生·gateway·istio
JuiceFS6 小时前
好未来:多云环境下基于 JuiceFS 建设低运维模型仓库
运维·云原生
景天科技苑7 小时前
【云原生开发】K8S多集群资源管理平台架构设计
云原生·容器·kubernetes·k8s·云原生开发·k8s管理系统
wclass-zhengge8 小时前
K8S篇(基本介绍)
云原生·容器·kubernetes
颜淡慕潇8 小时前
【K8S问题系列 |1 】Kubernetes 中 NodePort 类型的 Service 无法访问【已解决】
后端·云原生·容器·kubernetes·问题解决
川石课堂软件测试10 小时前
性能测试|docker容器下搭建JMeter+Grafana+Influxdb监控可视化平台
运维·javascript·深度学习·jmeter·docker·容器·grafana
昌sit!16 小时前
K8S node节点没有相应的pod镜像运行故障处理办法
云原生·容器·kubernetes