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

相关推荐
theo.wu26 分钟前
使用Buildpacks构建Docker镜像
运维·docker·容器
Lansonli33 分钟前
云原生(四十八) | Nginx软件安装部署
nginx·云原生·ecs服务器
唐大爹9 小时前
项目实战:k8s部署考试系统
云原生·容器·kubernetes
wusam13 小时前
螺蛳壳里做道场:老破机搭建的私人数据中心---Centos下Docker学习03(网络及IP规划)
运维·服务器·网络·docker·容器
一直在进步的派大星13 小时前
Docker 从安装到实战
java·运维·docker·微服务·容器
Zl15975315975316 小时前
k8s基础环境部署
云原生·容器·kubernetes
花酒锄作田17 小时前
[kubernetes]二进制方式部署单机k8s-v1.30.5
kubernetes
陌殇殇殇18 小时前
使用GitLab CI构建持续集成案例
运维·ci/cd·云原生·容器·kubernetes·gitlab
技术钱18 小时前
docker简介
运维·docker·容器
roman_日积跬步-终至千里18 小时前
【docker】docker常见命令
运维·docker·容器