docker多平台构建像参考文档:
https://docs.docker.com/build/building/multi-platform/

安装docker

一键安装

1
$ sudo curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

二进制安装docker

https://download.docker.com/linux/static/stable/
https://download.docker.com/linux/static/stable/x86_64/docker-24.0.7.tgz

docker 安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ wget https://download.docker.com/linux/static/stable/x86_64/docker-24.0.7.tgz
$ tar zxvf docker-24.0.7.tgz
docker/
docker/docker-init
docker/containerd-shim-runc-v2
docker/ctr
docker/docker-proxy
docker/dockerd
docker/docker
docker/containerd
docker/runc
$ mv docker/* /usr/bin

$ wget -O /usr/lib/systemd/system/docker.service \
https://raw.githubusercontent.com/docker/packaging/main/pkg/docker-engine/common/systemd/docker.service
# 删除 Requires=docker.socket containerd.service
# 替换 ExecStart=/usr/bin/dockerd --exec-opt native.cgroupdriver=systemd

$ systemctl daemon-reload
$ systemctl enable docker
阅读全文 »

contained安装

通过containerd 来创建一个容器,会创建一个 containerd-shim 的进程(垫片),containerd-shim启动后会去启动/usr/bin/containerd-shim-runc-v2,然后立即退出,此时containerd-shim-runc-v2的父进程就变成了systemd(1),这样containerd-shim-runc-v2就和containerd脱离了关系,即便containerd退出也不会影响到容器(这也是containerd-shim套件的作用)。OCI标准(Open Container Initiative 开放容器协议)的具体实现就是runc,真正创建和维护容器最终便是由runc来完成的。/usr/bin/containerd-shim-runc-v2会启动runc去create、start容器,然后runc立即退出,容器的父进程就变成了containerd-shim-runc-v2,这也是容器内部可以看到的PID=1的进程。

containerd

https://github.com/containerd/containerd
https://github.com/containerd/containerd/releases
https://github.com/containerd/containerd/blob/main/docs/cri/crictl.md
https://github.com/containerd/containerd/blob/main/docs/getting-started.md

阅读全文 »

go环境安装

pprof工具是go tool里的工具, 所以需要提前安装golang环境

官方文档: https://go.dev/doc/install

1
2
3
4
$ wget https://go.dev/dl/go1.23.2.linux-amd64.tar.gz
$ rm -rf /usr/local/go && tar -C /usr/local -xzf go1.23.2.linux-amd64.tar.gz
$ echo "export PATH=$PATH:/usr/local/go/bin" >> /etc/profile
$ source /etc/profile
阅读全文 »

背景

Dockershim从Kubernetes 1.20版本开始废弃,计划在Kubernetes 1.24版本移除,所以目前1.24+的ACK集群只能containerd作为运行时,但是docker build构建的镜像是可以正常使用的, docker build 创建的镜像适用于任何 CRI 实现, 参考 Dockershim Removal FAQ

本文介绍一下containerd运行的节点上如何拉取公共镜像镜像,私有仓库镜像,便于排查containerd节点的免密或者自建镜像仓库的镜像

工具介绍

提示 很多时候我们都可以通过–help来查看工具都提供了哪些功能,因为版本之间直接可能存在兼容性问题

本文对应的软件版本信息(基于阿里云的ACK)

ACK版本 containerd版本
v1.24.6-aliyun.1 containerd 1.6.20

containerd 支持的客户端工具有很多, 比如 ctr、nerdctl、crictl、能调用cri接口的如kubelet等,其中是ctr、nerdctl是不支持CRI Plugin,比如镜像加速, 但是可以通过--hosts-dir的方式指定

本文就通过介绍ctr和crictl, ACK 中默认安装的。

阅读全文 »

搭建各种云原生环境的过程中,经常需要生成证书,本文记录使用 openssl/cfssl 快速生成证书的方法。

使用 opessl 生成证书

测试证书: openssl s_client -connect 1.1.1.1:443 2> /dev/null | openssl x509 -text | grep -A 1 “X509v3 Subject Alternative Name:”

1
2
3
4
5
6
7
8
9
# 0.一气呵成,不产生csr
$ openssl req -newkey rsa:4096 \
-subj "/C=CN/ST=ZheJiang/L=HangZhou/O=ZMQ/OU=ZMQ Group/CN=*.zmq100.cn/emailAddress=zmq@zmq100.cn" \
-x509 \
-sha256 \
-days 3650 \
-nodes \
-out server.crt \
-keyout server.key
阅读全文 »

使用 cert-manager 签发免费证书

概述

随着 HTTPS 不断普及,越来越多的网站都在从 HTTP 升级到 HTTPS,使用 HTTPS 就需要向权威机构申请证书,需要付出一定的成本,如果需求数量多,也是一笔不小的开支。cert-manager 是 Kubernetes 上的全能证书管理工具,如果对安全级别和证书功能要求不高,可以利用 cert-manager 基于 ACME 协议与 Let’s Encrypt 来签发免费证书并自动续期,实现永久免费使用证书。

阅读全文 »