0%

portainer

一款简单流行的 docker ui 工具.

portainer安装

# 9443 TLS端口,也可暴露 9000 http端口。 8000是edge agent端口,可选。
docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:2.21.5

agent安装

docker run -d   -p 9001:9001   --name portainer_agent   --restart=always \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /var/lib/docker/volumes:/var/lib/docker/volumes  \
  -v /:/host   portainer/agent:2.21.5

安装helm仓库

helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
helm repo update

安装 NFS Client Provisioner

helm install nfs-client nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
  --namespace nfs-storage  --create-namespace\
  --set nfs.server=<NFS_SERVER_IP> \
  --set nfs.path=<NFS_SHARED_PATH>

其他一些推荐配置:

--set image.repository=registry.cn-beijing.aliyuncs.com/kubesphereio/nfs-subdir-external-provisioner
--set image.tag=v4.0.2
--set storageClass.defaultClass=true
--set storageClass.name=nfs-client

验证安装

kubectl get storageclass

如果helm包下载不下来可以提前下载,然后从本地目录安装

helm install <release-name> /path/to/mychart-0.1.0.tgz
  • 安装未打包的 Chart 文件夹
helm install <release-name> /path/to/mychart/

例如 helm install nfs-client .

  • 使用 -f 指定自定义值文件:
helm install my-release ./mychart-0.1.0.tgz -f values.yaml

生成 .htpasswd 文件

htpasswd -c /etc/nginx/.htpasswd user

这里的参数解释:

  • -c:表示创建新的 .htpasswd 文件(如果文件已经存在,使用该选项会覆盖文件)。
  • /etc/nginx/.htpasswd:这是 .htpasswd 文件的存储位置,你可以根据需要修改这个路径。
  • user:你要创建的用户名。

执行命令后,它会提示你输入并确认密码。输入密码后,htpasswd 工具会自动将其加密并保存到 .htpasswd 文件中。

配置 Nginx 使用基本认证

server {
    listen 80;

    location / {
        auth_basic "Restricted Area";           # 提示消息
        auth_basic_user_file /etc/nginx/.htpasswd;  # 指定 .htpasswd 文件路径
    }
}

代码中使用认证

  1. 拼接用户名和密码
    首先,你需要将用户名和密码拼接成一个字符串,格式为 username:password。例如:
username:password
  1. 对 username:password 字符串进行 Base64 编码
echo -n "user:password123" | base64

输出将是类似以下的 Base64 编码:

dXNlcjpwYXNzd29yZDEyMw==
  1. 在 Authorization 头中使用
    生成的 Base64 编码字符串可以直接用于 HTTP 请求的 Authorization 头中,如下所示:
Authorization: Basic dXNlcjpwYXNzd29yZDEyMw==

使用命令行解码 Base64 编码: echo "dXNlcjpwYXNzd29yZDEyMw==" | base64 --decode

  1. 下载最新的otel-windows-amd64.exe,改名otel.exe放到$GOPATH/bin目录下

    $GOPATH/bin 需要加入到系统环境变量。

  2. 参考demo 使用otel工具编译出可执行文件.

OTEL_EXPORTER_OTLP_ENDPOINT="http://172.16.20.91:12394"  GOOS=linux GOARCH=amd64 otel go build

  1. 下载一个opentelemetry-javaagent.jar 挂载到容器目录下,如/root/trace

  2. 容器启动时添加环境变量

  • JAVA_TOOL_OPTIONS: -javaagent:/root/trace/opentelemetry-javaagent.jar
  • OTEL_EXPORTER_JAEGER_ENDPOINT: http://opentelemetry-collector.loki:14250
  • OTEL_SERVICE_NAME : 自定义服务名
  • OTEL_TRACES_EXPORTER : jaeger
  • OTEL_METRICS_EXPORTER : none

离线安装

如果是离线安装的docker,可以自己准备一份containerd.service用于管理containerd启停。

# 生成或检查默认配置文件
containerd config default > /etc/containerd/config.toml

# 创建服务文件
sudo vim /etc/systemd/system/containerd.service
[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target local-fs.target

[Service]
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/bin/containerd

Type=notify
Delegate=yes
KillMode=process
Restart=always
RestartSec=5
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNPROC=infinity
LimitCORE=infinity
LimitNOFILE=1048576
# Comment TasksMax if your systemd version does not supports it.
# Only systemd 226 and above support this version.
TasksMax=infinity
OOMScoreAdjust=-999

[Install]
WantedBy=multi-user.target
# 重新加载 Systemd 配置
sudo systemctl daemon-reload
# 启动 containerd
sudo systemctl start containerd
# 设置为开机自启动:
sudo systemctl enable containerd

nerdctl

containerd自带的ctl命令与docker命令不一样,使用不习惯的用户可以考虑安装nerdctl。这个工具命令风格和docker一致。

# 下载最新版本
wget https://github.com/containerd/nerdctl/releases/download/v2.0.1/nerdctl-2.0.1-linux-amd64.tar.gz
# 安装
sudo tar -C /usr/local/bin -xzf nerdctl-2.0.1-linux-amd64.tar.gz
# 测试
nerdctl version

安装CNI插件

下载页下载最新版本

wget https://github.com/containernetworking/plugins/releases/download/v1.6.1/cni-plugins-linux-amd64-v1.6.1.tgz
# 解压到 /opt/cni/bin 目录
sudo mkdir -p /opt/cni/bin
sudo tar -xzf cni-plugins-linux-amd64-v1.6.1.tgz -C /opt/cni/bin
# 验证插件是否安装成功
ls /opt/cni/bin

检查containerd配置,确保CNI配置正确

[plugins."io.containerd.grpc.v1.cri".cni]
  bin_dir = "/opt/cni/bin"
  conf_dir = "/etc/cni/net.d"

然后重启sudo systemctl restart containerd.

使用nerdctl network create bridge创建一个新的默认 bridge 网络.

# 检查网络是否创建成功
nerdctl network ls