1 | # 导出根证书 |
导出Secret
1 | kubectl get secret example-secret -o yaml > example-secret.yaml |
导出内容格式如下
1 | apiVersion: v1 |
Base64解码
1 | # cert |
1 | # 导出根证书 |
导出Secret
1 | kubectl get secret example-secret -o yaml > example-secret.yaml |
导出内容格式如下
1 | apiVersion: v1 |
Base64解码
1 | # cert |
配置文件
添加helm库
1 | # 添加库 |
配置 values.yaml
1 | auth: |
部署
1 | helm install -f values.yaml redis bitnami/redis --namespace --create-namespace |
参考
kubernetes环境部署单节点redis - 紫色飞猪 - 博客园 (cnblogs.com)
参考
[[Others/OpenSSL生成自签名证书|OpenSSL生成自签名证书]]
1 | kubectl create secrets tls example-io-tls --key example.io.key --cert example.io.crt |
手动管理证书可忽略下边的安装过程,跳转到证书配置
方式一: 使用Helm部署(推荐)
1 | # 添加镜像源 |
方式二: 使用kubectl部署
1 | # Kubernetes 1.16+ |
Issuer 与 ClusterIssuer 的区别是 ClusterIssuer 可跨命名空间使用,而 Issuer 需在每个命名空间下配置后才可使用。这里我们使用 ClusterIssuer,其类型选择 Let‘s Encrypt。
正式环境速率限制(每个注册域名可签发的证书数量(每周 50 份)),使用测试环境测试一切正常后再切换正式环境。
letsencrypt-issuer-staging.yaml
1 | apiVersion: cert-manager.io/v1 |
letsencrypt-issuer-prod
1 | apiVersion: cert-manager.io/v1 |
说明:
metadata.name 创建的签发机构的名称,创建证书的时候会引用
spec.acme.email 邮箱,证书快过期的时候会有邮件提醒,不过cert-manager会利用acme协议自动给我们重新颁发证书来续期
spec.acme.server acme 协议的服务端,由官方给出
spec.acme.privateKeySecretRef 指示此签发机构的私钥将要存储到哪个Secret对象中
spec.acme.solvers.http01 指示签发机构使用HTTP-01的方式进行acme协议 (还可以用DNS方式,acme协议的目的是证明这台机器和域名都是属于你的,然后才准许给你颁发证书)
selfsigned-issuer.yaml
1 | apiVersion: cert-manager.io/v1 |
spec.subjects.organizations:
example-io-tls.yaml
1 | apiVersion: cert-manager.io/v1 |
生产环境使用建议
实际生产环境中使用cert-manager可以考虑以下建议:
Secret
及Issuer
放在某个独立的命名空间中,与其它业务的命名空间隔离起来。Issuer
,要记得定期更新根CA证书。Letsencrypt
类型的Issuer
,目前支持两种方式验证域名的所有权,基于DNS记录的验证方案和基于文件的HTTP验证方案。cert-manager
还提供ingress-shim
方式,自动为Ingress
资源生成证书,只需要在Ingress
资源上打上一些标签即可,详细可参考这里。spec.secretName 指示证书最终存到哪个 Secret 中
spec.issuerRef.kind 值为 ClusterIssuer 说明签发机构不在本 namespace 下,而是在全局
spec.issuerRef.name 我们创建的签发机构的名称 (ClusterIssuer.metadata.name)
spec.duration 证书过期时间
spec.renewBefore 在过期前自动更新
spec.dnsNames 指示该证书的可以用于哪些域名
spec.acme.config.http01.domains 指示该证书的可以用于哪些域名
获取CA证书,root-ca.crt,k3s导出证书 参考K3s导出证书
k8s中使用cert-manager玩转证书-腾讯云开发者社区-腾讯云 (tencent.com)
k8s 使用cert-manager证书管理自签-CSDN博客
k8s部署cert-manager实现证书自动化_cert-manager.yaml-CSDN博客
Cert-Manager 实现 K8s 服务域名证书自动化续签 - 知乎 (zhihu.com)
手把手教你使用 cert-manager 签发免费证书 - 腾讯云原生 - 博客园 (cnblogs.com)
在 k3s 内使用 cert-manager 管理证书 (bowser1704.github.io)
用 k3s 轻松管理 SSL 证书 | Linux 中国 - 知乎
k8s中级篇-cert-manager+Let‘s Encrypt自动证书签发_cert-manager let’s encrypt-CSDN博客
k3s 使用 Letsencrypt 和 Traefik 完成 https 入口部署-腾讯云开发者社区-腾讯云 (tencent.com)
容器服务 使用 cert-manager 签发免费证书-实践教程-文档中心-腾讯云 (tencent.com)
使用cert-manager为Traefik IngressRoute自动签发Let’s Encrypt证书 – 桃又的技术笔记 (taoyouh.cn)
内网证书
cert-manager管理内网k8s开发环境证书 - hueidou163 - 博客园 (cnblogs.com)
SelfSigned - cert-manager (k8s-docs.github.io)
k8s 使用cert-manager证书管理自签-CSDN博客
Kubernetes (K8S) 中Traefik自动申请证书-腾讯云开发者社区-腾讯云 (tencent.com)
k8s ingress配置自签名证书,并解决Kubernetes Ingress Controller Fake Certificate-CSDN博客
清华 https://mirrors.tuna.tsinghua.edu.cn
腾讯 https://mirrors.tencent.com
华为 https://mirrors.huaweicloud.com
中国科技大学 https://mirrors.ustc.edu.cn
华中科技大学 http://mirror.hust.edu.cn
网易 http://hub-mirror.c.163.com
中国科技大学 https://docker.mirrors.ustc.edu.cn (不可用)
道客 https://docker.m.daocloud.cn (参考官方文档)
腾讯 https://mirror.ccs.tencentyun.com
华为 https://mirror.swr.myhuaweicloud.com
阿里云 https://registry.cn-hangzhou.aliyuncs.com
[^注]: 阿里可申请私有加速,需注册账号,注册后地址修改为 https://{私有ID}.mirror.aliyuncs.com。详细信息参考官方文档
阿里 https://registry.aliyuncs.com/google_containers
中科大 https://gcr.mirrors.ustc.edu.cn (2022.8之后不再更新镜像,校外访问返回403)
华为 https://mirror.swr.myhuaweicloud.com
道客 https://m.daocloud.io/k8s.gcr.io 文档
道客 https://m.daocloud.io/quay.io 参考支持镜像列表
道客 https://m.daocloud.io/ghcr.io 参考支持镜像列表
ArtifactHub https://artifacthub.io/
华为 https://mirrors.huaweicloud.com/helm/
bitnami https://charts.bitnami.com/bitnami
Google https://gcr.io/kubernetes-helm
Docker(/etc/docker/daemon.json )
1 | { |
Containerd(/etc/containerd/config.toml)
1 |
|
K3s中Containerd容器(/var/lib/rancher/k3s/agent/etc/containerd/config.toml)
K3s 默认的 containerd 配置文件目录为/var/lib/rancher/k3s/agent/etc/containerd/config.toml,但直接操作 containerd 的配置文件去设置镜像仓库或加速器相比于操作 docker 要复杂许多。K3s 为了简化配置 containerd 镜像仓库的复杂度,K3s 会在启动时检查/etc/rancher/k3s/中是否存在 文件,如果存在该文件,就会根据 registries.yaml 的内容转换为 containerd 的配置并存储到/var/lib/rancher/k3s/agent/etc/containerd/config.toml,从而降低了配置 containerd 镜像仓库的复杂度。
1 | mirrors: |
containerd 与 docker 都有默认仓库,并且都为 docker.io
。如果配置中未指定 mirror 为 docker.io
,重启 containerd 后会自动加载 docker.io
配置。与 docker 不同的是,containerd 可以修改 docker.io
对应的 endpoint( 默认为 https://registry-1.docker.io ),而 docker 无法修改。
docker 中可以通过 registry-mirrors
设置镜像加速地址。如果 pull 的镜像不带仓库地址(项目名+镜像名:tag
),则会从默认镜像仓库去拉取镜像。如果配置了镜像加速地址,会先访问镜像加速仓库,如果没有返回数据,再访问默认吧镜像仓库。
k3s完整配置文件
1 | mirrors: |
镜像转换
1 |
|
转换为gcr.io镜像
1 | docker pull registry.aliyuncs.com/google_containers/coredns:1.6.5 |
K8S批量下载docker images
1 | kubeadm config images list |
1 |
|
更新版
1 |
|
或(V1.3以上)
1 | kubeadm init --image-repository registry.aliyuncs.com/google_containers \ |
参考 [[K3s安装|K3s安装]]
组件 | 端口 | 访问地址 | 说明 |
---|---|---|---|
CoreDNS | 53 | DNS服务器,实现域名映射 | |
MySQL | 3306 | Gitea、Harbor等组件的依赖,与PostgreSQL二选一即可。安装参考K3s安装MySQL | |
PostgreSQL | 5432 | Gitea、Harbor等组件的依赖,与MySQL二选一即可。安装参考K3s安装PostgreSQL | |
Cert-Manager | 证书管理服务,有公网域名推荐使用,内网部署可生成自签名证书 | ||
Traefik | 443 | https://dashboard.example.io | 负载均衡器,服务入口 |
Harbor | https://harbor.example.io | 私有镜像库,镜像缓存。安装参考K3s安装 | |
Gitea | https://gitea.example.io | 源代码仓库,ssh与宿主机ssh端口冲突,需要协调 | |
Drone | https://drone.example.io | 基于Docker的自动编译服务,与Gitea Runner二选一即可。 | |
SonarQube | https://sonar.example.io | 静态代码审查。 |
参考 K3s部署MySQL
1 | # k3s使用 local-path 部署 |
1 | # k3s使用 local-path 部署 |
1 | ``` |
1 |
1 |
1 |
1 |
Traefik Proxy Documentation - Traefik
k3s 部署gitea+drone_golang k3s-CSDN博客
Harbor 结合 Traefik 的 HA 安装配置-腾讯云开发者社区-腾讯云 (tencent.com)
Traefik - Kubernetes 配置TCP/HTTP服务-腾讯云开发者社区-腾讯云 (tencent.com)
Drone CI使用docker插件构建和推送镜像 - wosperry - 博客园 (cnblogs.com)
在 Kubernetes 上部署 Drone 持续集成环境 | Hanggi - NGNL
Gitea 与 Drone 集成实践:完全基于 Docker 搭建的轻量级 CI/CD 系统 - Gitea - 博客园 (cnblogs.com)
1 | # master安装 |
其中<k3s-server-ip>
是K3s服务器的IP地址,<token>
是由K3s服务器生成的唯一令牌。可以使用以下命令在K3s服务器上获取此令牌:
1 | sudo cat /var/lib/rancher/k3s/server/node-token |
设置 kubeconfig 文件路径用于对 Kubernetes 集群的访问。
1 | echo "export KUBECONFIG=/etc/rancher/k3s/k3s.yaml" >> ~/.bashrc |
1 | sudo systemctl stop k3s.service |
1 | #安装helm |
1 | # 安装自动补全 |
1 | # 查看集权所有资源 |
1 | # 创建2副本的whoami应用,默认1副本 |
K3s 默认的 containerd 配置文件目录为/var/lib/rancher/k3s/agent/etc/containerd/config.toml,但直接操作 containerd 的配置文件去设置镜像仓库或加速器相比于操作 docker 要复杂许多。K3s 为了简化配置 containerd 镜像仓库的复杂度,K3s 会在启动时检查/etc/rancher/k3s/中是否存在 registries.yaml 文件,如果存在该文件,就会根据 registries.yaml 的内容转换为 containerd 的配置并存储到/var/lib/rancher/k3s/agent/etc/containerd/config.toml,从而降低了配置 containerd 镜像仓库的复杂度。
K3s 镜像仓库配置文件由两大部分组成:mirrors 和 configs:
containerd 使用了类似 K8S 中 svc 与 endpoint 的概念,svc 可以理解为访问名称,这个名称会解析到对应的 endpoint 上。也可以理解 mirror 配置就是一个反向代理,它把客户端的请求代理到 endpoint 配置的后端镜像仓库。mirror 名称可以随意填写,但是必须符合 IP 或域名的定义规则。并且可以配置多个 endpoint,默认解析到第一个 endpoint,如果第一个 endpoint 没有返回数据,则自动切换到第二个 endpoint,以此类推。
1 | mirrors: |
配置非安全(http)私有仓库,只需要在 endpoint 中指定 http 协议头的地址即可。
在没有 TLS 通信的情况下,需要为 endpoints 指定 http://,否则将默认为 https。
1 | mirrors: |
1 | mirrors: |
1 | mirrors: |
如果后端仓库使用的是自签名的 ssl 证书,那么需要配置 CA 证书 用于 ssl 证书的校验。
1 | mirrors: |
如果镜像仓库配置了双向认证,那么需要为 containerd 配置 ssl 证书用于 镜像仓库对 containerd 做认证。
1 | mirrors: |
Containerd 与 docker 都有默认仓库,均为 docker.io 。如果配置中未指定 mirror 为 docker.io,containerd 后会自动加载 docker.io 配置。与 docker 不同的是,containerd 可以修改 docker.io 对应的 endpoint(默认为 https://registry-1.docker.io),而 docker 无法修改。
Docker 中可以通过 registry-mirrors 设置镜像加速地址。如果 pull 的镜像不带仓库地址(项目名+镜像名:tag),则会从默认镜像仓库去拉取镜像。如果配置了镜像加速地址,会先访问镜像加速仓库,如果没有返回数据,再访问默认的镜像仓库。
Containerd 目前没有直接配置镜像加速的功能,但 containerd 中可以修改 docker.io 对应的 endpoint,所以可以通过修改 endpoint 来实现镜像加速下载。因为 endpoint 是轮询访问,所以可以给 docker.io 配置多个仓库地址来实现 加速地址+默认仓库地址。如下配置示例:
1 | mirrors: |
参考
系统启动后风扇忽高忽低,进入IPMI后台可以看到,看到传感器日志里大量的告警
造成此问题的原因是风扇转速过低,触发了超微的风扇转速允许的下限,从而强制满速运转,而在满速后主板又很快发现没有问题,且此时温度较低,风扇开始降速,直到降速到下限以下,重复此过程。
在进入IPMI后台管理界面后风扇速度有四种智能模式可调
Standard: zone0和zone1 风速为50%
Optimal: 风速为30%
Full: 风速为100%
Heavy IO: zone0 为50%,zone1 为75%
1 | apt install ipmitool # Ubuntu/Debian指令 |
1 | # 风扇名可以看告警里边的对应风扇名 |
ipmitool windows 版 下载地址
1 | ipmitool -H [IPMI网口IP地址] -U [IMPI账户] -P [IPMI密码] sensor thresh FAN1 lower 100 125 125 |
如果你运行上面的命令后,风扇转速回落后马上又返回原样,这表明服务器的自动调速覆盖了你手动设置的转速。你需要切换服务器风扇策略为全速(Full Speed),在这个策略下服务器不会使用自动调节转速,因此也不会覆盖你手动设置的转速。
运行下面的命令切换到全速模式(也可以进入IPMI界面调整):
1 | ipmitool -H [IPMI网口IP地址] -U [IMPI账户] -P [IPMI密码] 0x30 0x45 0x01 0x01 |
1.解决超微 SuperMicro 主板风扇反复高低转速问题 - 哔哩哔哩 (bilibili.com)
1 | [common] |
1 | sudo vim /etc/systemd/system/frps.service |
启动文件
1 | [Unit] |
1 | [common] |