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
- 创建CNI 网络,即容器网络
github获取安装它俩。在github搜索---打开右边的release,然后复制网络连接,在服务器上wget + 网络链接
现在宿主机上创建网桥。然后所有的容器都可以通过这个网桥与外界通信 - 为容器配置网络功能
用插件就这样给它加上网络功能了,进到容器里它就多了一个网卡
持久化存储
容器可以挂载到宿主机目录
containerd 的缺陷
它不能bulid,commit等等。
docker帮助实现容器管理
2. 日志
ELK 集群部署
-
收集 k8s 节点系统日志需要 filebeat. Filebeat 在ELK堆栈中负责收集和转发日志数据
需要收集那个节点的日志就在哪安装 filebeat
-
收集节点应用程序日志,就是物理机运行的程序
收集机器上这两处日志(注意上图划线这里的路径是容器里的路径,是挂载的物理机相同的路径) 给logstash
Filebeat -> Logstash -> Elasticsearch。Filebeat 收集日志并发送到 Logstash,Logstash 处理数据后发送到 Elasticsearch 进行存储和索引。
Logstash 提供了强大的过滤插件,允许用户对数据进行复杂的处理和转换,包括:
解析:从原始数据中提取有用的信息,例如解析 JSON、CSV、XML 等格式的数据。
转换:修改数据内容,例如添加或删除字段,格式化时间戳等。
增强:通过查找、计算等方式添加更多有用的信息,例如通过地理IP数据库添加地理位置信息。
清洗:去除无用的数据,过滤掉不需要的日志条目。
下面是logstash 配置文件
- 收集pod日志
一个pod多个容器,filebeat作为边车容器从共享存储(两容器都挂一个目录)中取走工作容器的日志
EFK
ELK部署需要单独主机,但是EFK可以部署到 k8s 内
logstash是java开发的
缓存和高可用有啥不懂的
3. 监控
通过helm部署 Prometheus
- metallb-system 用来提供负载均衡服务
- ingress-nginx 用来从外部对Prometheus和 grafana的管理
- helm安装到物理机,helm install prometheus 到 k8s,此时 grafana 也一块装好了
- 对 k8s 做了哪些监控,通过 Prometheus 网站查看。grafana数据展示
- ingress的用处,向外面暴露 Prometheus和 grafana的域名。
通过在笔记本上配置host,用上面这个ip
同一ip 对应两个域名就是 ingress-nginx反向代理的作用
监控redis,redis也是通过helm部署
先要部署 redis-exporter,也就是探针。然后创建svc,通过标签与 探针发生联系
创建一个ServiceMonitor被 Prometheus 发现,自动对 ServiceMonitor的 svc 监控,里面有redis相关的数据记录
监控mysql
yaml 文件部署mysql
部署 mysql exporter