使用K3S+ Kilo部署安全跨多区多云K8S集群(支持ARM64),支持nginx-ingress及velero备份

2023年1月21日 更新支持最新版rancher,版本号为v2.7.1。k3s依赖版本也从1.22升级到1.24,以下教程内容已经更新,部分信息没有更新不影响部署,已在Oracle上验证通过。

申请Oracle甲骨文的Arm实例已经很久了,甲骨文的配置相当的高,4核24G内存100G硬盘5TB流量,但一直没有正儿八经地用起来,属实是有些浪费资源了。于是前些天就把手上有的这些机子组了一个跨区ARM集群,分属三个区域,分别为:春川(Chuncheon)、东京(Tokyo)、首尔(Seoul)。由于三个机房是物理隔离开的,没有直接组在一起的链路,于是除了使用甲骨文官方的VPN之外,我们还可以直接使用Wireguard将这三台机子组到一个局域网内,这样就方便组建集群了。

先来看看夸张的ARM 12核心,70G内存,158G可用存储的k3s集群。

82895e1562122448

OK~前情交待完毕,以下是这次部署所需达成的目标:

  1. 前面提到,三个机器不是一个区域的,所以需要将三台主机使用Wireguard组成一个局域网
  2. 先不考虑高可用问题,由首尔作为master控制节点,与春川和东京共为工作节点提供服务
  3. 不使用甲骨文的LB,由主机自行提供服务,域名指向其中任意一台都可以访问,也可搭配智能解析系统
  4. 需要在lb位置集成modsecurity,过滤一些恶意请求
  5. 不使用traefik作为前端暴露组件,而是使用更容易理解的nginx ingress(也因为里面自带集成了modsecurity)
  6. 需要一个好用的控制面板,kubectl操作起来还得连接服务器,稍显麻烦。这里直接使用rancher,主要是习惯了。
  7. 需要使用分布式存储,这里直接使用rancher的Longhorn进行部署
  8. 需要部署数据备份组件,这里使用开源的velero,可以定期备份到远程的S3存储服务器,作为最后的灾备恢复选项。(鬼知道什么时候会被k掉)

以下为实操步骤:

注意:这里统一使用ubuntu 20.04的发行版,最低版本为18.04,但眼下不适合用最新版的 22.04 发行版,kubernetes使用v1.24稳定版,版本太新会有其他问题的

注意2:这里有两个概念,一个是公网IP,一个是网卡IP,在甲骨文、阿里云等等的云服务厂商那里,公网IP是不会直接给到实例中的系统的,而是给一个nat后的IP,这个IP在外部是不能访问的。因此,在进行接下来的配置中,要注意这点,在本例中,我是直接使用各自节点的ipv6公网地址。

使用Wireguard组局域网

在本例中,我们需要组建一个局域网,但与网上搜索到的直接使用wireguard不同,我们需要借助Kilo对wireguard进行管理和连接,因此在这里只需要安装好wireguard即可,后续操作在k3s中进行。

安装wireguard

直接在终端内分别为三个区域的主机安装wireguard即可,使用命令:

apt update
apt install wireguard

安装部署 k3s server 节点

curl -sfL https://get.k3s.io | K3S_CLUSTER_INIT=true \
INSTALL_K3S_EXEC="server" \
INSTALL_K3S_CHANNEL=v1.24 \
sh -s - --node-label "topology.kubernetes.io/region=seoul" \
--node-label "master-node=true" \
--tls-san {{ server_public_ip }} \
--advertise-address {{ server_public_ip }} \
--disable traefik \
--flannel-backend none \
--kube-proxy-arg "metrics-bind-address=0.0.0.0" \
--kube-apiserver-arg "feature-gates=EphemeralContainers=true"

简要说明:

  1. K3S_CLUSTER_INIT=true : 集群模式,会安装内置的 etcd,而不是 sqlite3;
  2. INSTALL_K3S_EXEC=”server” : 指定为server节点
  3. INSTALL_K3S_CHANNEL=v1.24 : 安装的K3S版本,这里选择1.24 稳定版本,最新的rancher v2.7的版本推荐1.23以上的版本,这里选择1.24稳定版;
  4. –node-label “topology.kubernetes.io/region=seoul” : 设置当前服务器的label为首尔区域;
  5. –node-label “master-node=true” : 设置为主节点;
  6. –tls-san {{ server_public_ip }}: {{ server_public_ip }} 改为当前服务器公网 IPv4地址,–tls-san
    这个选项在 TLS 证书中增加了一个额外的主机名或 IP 作为备用名称,如果你想通过 IP 和主机名访问,可以多次指定,多个值之间用英文半角逗号分隔。注意:如果不指定 –tls-san {{ server_public_ip }},可能会导致 kubectl 无法通过 server_public_ip 来访问集群;
  7. –advertise-address {{ server_public_ip }}:{{ server_public_ip }} 改为当前服务器公网 IPv4地址,用于agent连接K3S Server的API,但是注意不要指定 –node-external-ip {{ server_public_ip }},会导致无法获得用户真实IP;
  8. –disable traefik : 关闭traefik,后面安装nginx-ingress
  9. –flannel-backend none : 关闭默认的flannel CNI,后面安装Kilo
  10. –kube-proxy-arg “metrics-bind-address=0.0.0.0” : kube-proxy 参数,这个参数直接影响 Metrics 的获取;
  11. –kube-apiserver-arg “feature-gates=EphemeralContainers=true” :  (可选)启用 feature-gates:EphemeralContainers,方便在不重启 pod 的情况下附加 sidecar 进行调试。

执行后,检查安装结果,可以看到节点已经可以找到了:

# kubectl get node 
NAME                     STATUS   ROLES                       AGE     VERSION
instance-20190921-1325   NotReady    control-plane,etcd,master   0h01m   v1.22.12+k3s1

可以看到节点状态为 NotReady ,这是正常的,因为我们还没有添加网络CNI网络组件,接下来就开始安装它。

安装Kilo CNI网络组件

网络拓扑

然后我们需要指定第一台节点的拓扑,后续添加上来的agent节点会自动添加进来,但仍然建议对其网络进行拓扑定义,现在先定义第一台:

kubectl annotate nodes instance-20190921-1325 kilo.squat.ai/location="seoul"
kubectl annotate nodes instance-20190921-1325 kilo.squat.ai/force-endpoint="{{ server_public_ipv6 }}:51820"
kubectl annotate nodes instance-20190921-1325 kilo.squat.ai/persistent-keepalive=20

简单说明:

  1. location : 对节点进行位置定义,方便维护
  2. force-endpoint : 自动发现节点时,会有endpoint的定义,这个地址如果你是用内网ipv4,就容易变成不可路由的地址,所以这里建议直接用绑定到网卡上的IPv6地址,进行覆盖定义
  3. persistent-keepalive : 是wireguard的配置选项,保活

安装Kilo CNI组件

kubectl apply -f https://raw.githubusercontent.com/squat/kilo/main/manifests/crds.yaml
wget https://raw.githubusercontent.com/squat/kilo/main/manifests/kilo-k3s.yaml

在第二步使用wget,是因为需要对Kilo的DaemonSet进行修改,在我们案例中,各区没有直接的网络连接,最好使用fullmesh模式,这部分的说明,参考:https://kilo.squat.ai/docs/topology/#full-mesh,添加–mesh-granularity=full到kilo-k3s.yaml守护程序pod模板中:

- name: kilo
  image: squat/kilo
  args:
      - --kubeconfig=/etc/kubernetes/kubeconfig
      - --hostname=$(NODE_NAME)
      - --mesh-granularity=full
  env:
      - name: NODE_NAME
        valueFrom:
            fieldRef:
                fieldPath: spec.nodeName

然后执行安装

kubectl apply -f kilo-k3s.yaml

验证Kilo安装

  1. 在 kube-system 命名空间下的 pod 中,可以找到koli的pod已经成功运行,状态为 RUNNING
  2. 执行 kubectl get node 时查看到的节点状态由 NotReady 变为 Ready
  3. 在 k3s server 节点上,已经有 kilo 的相关 annotations,示例如下:
    apiVersion: v1
    kind: Node
    metadata:
      annotations:
        k3s.io/external-ip: {{ server_public_ip }}
        k3s.io/hostname: instance-20190921-1325
        k3s.io/internal-ip: 10.0.0.170
        ...
        kilo.squat.ai/discovered-endpoints: '{"{{ public_key_1 }}":{"IP":"{{ agent_public_ip_1 }}","Port":51820,"Zone":""},"{{ public_key_2 }}":{"IP":"{{ agent_public_ip_2 }}","Port":51820,"Zone":""}}'
        kilo.squat.ai/endpoint: '{{ server_public_ipv6 }}:51820'
        kilo.squat.ai/force-endpoint: '{{ server_public_ipv6 }}:51820'
        kilo.squat.ai/granularity: location
        kilo.squat.ai/internal-ip: 10.0.0.170/24
        kilo.squat.ai/key: {{ private_key }}
        kilo.squat.ai/last-seen: "1658647061"
        kilo.squat.ai/location: seoul
        kilo.squat.ai/persistent-keepalive: "20"
        kilo.squat.ai/wireguard-ip: 10.4.0.2/16
    ...

    可以看到 wireguard-ip,这个是节点的wg ip地址,后面新增agent节点进来之后,也会自动分配到地址。

安装部署 k3s agent节点

部署agent节点前,需要在server节点先获取到token,后面添加agent节点时都需要带上,可以添加多台agent节点,这里以添加两台为例子。

获取token:

cat /var/lib/rancher/k3s/server/node-token

执行命令添加agent节点

curl -sfL https://get.k3s.io  | K3S_URL=https://{{ server_public_ip }}:6443 \
K3S_TOKEN={{ server_token }} \
INSTALL_K3S_EXEC="agent" \
INSTALL_K3S_CHANNEL=v1.24 \
sh -s - --node-label "topology.kubernetes.io/region=chuncheon" \
--node-label "worker-node=true" \
--kube-proxy-arg "metrics-bind-address=0.0.0.0"

简要说明:

  1. INSTALL_K3S_EXEC=”agent” : 定义添加的是agent节点,将只作为工作节点加入集群,没有etcd;
  2. INSTALL_K3S_CHANNEL=v1.24 : 安装的K3S版本,这里选择1.24 稳定版本,与server节点要一致;
  3. K3S_URL=https://{{ server_public_ip }}:6443 : 指定server节点api访问地址
  4. K3S_TOKEN={{ server_token }} : 使用上一步获取到的token值
  5. –node-label “topology.kubernetes.io/region=chuncheon” : 设置当前服务器的label为春川区域;
  6. –node-label “worker-node=true” : 设置为工作节点;
  7. –kube-proxy-arg “metrics-bind-address=0.0.0.0” : kube-proxy 参数,这个参数直接影响 Metrics 的获取;

执行后等待1分钟左右,回到k3s server节点,执行kubectl get node,即可看到新添加的节点,同样,这里我们对添加进来的节点进行拓扑定义

kubectl annotate nodes instance-20190931-1637 kilo.squat.ai/location="chuncheon"
kubectl annotate nodes instance-20190931-1637 kilo.squat.ai/persistent-keepalive=20

Kilo CNI的网卡说明

网卡列表

  1. kilo0:WireGuard VPN 网络,用以 Node 间组建 VPN 内网;如果同一个区域内存在VPC,内网连接则优先使用VPC内网,只有走外部其他区域的链路才会走WireGuard 加密网络;
  2. kube-bridge: 桥接网络,Node内 Pod 的网卡与宿主机的网卡进行连接,如需跨网通信,则会路由到WireGuard VPN 网络共享通信;
  3. tunl0:Bridge 模式下,多主机网络通信需要额外配置主机路由,或使用 overlay 网络。通过 Kilo 来自动配置。引用网上的一张图:

bad9ff3733235040-1000x510-1

路由表

首尔机器上的路由表:

# ip r
default via 10.0.0.1 dev enp0s3 proto dhcp src 10.0.0.170 metric 100 
10.0.0.0/24 dev enp0s3 proto kernel scope link src 10.0.0.170 
10.0.0.98 via 10.4.0.1 dev kilo0 proto static onlink 
10.0.0.246 via 10.4.0.3 dev kilo0 proto static onlink 
10.4.0.0/16 dev kilo0 proto kernel scope link src 10.4.0.2 
10.42.0.0/24 dev kube-bridge proto kernel scope link src 10.42.0.1 
10.42.1.0/24 via 10.4.0.1 dev kilo0 proto static onlink 
10.42.2.0/24 via 10.4.0.3 dev kilo0 proto static onlink 
169.254.0.0/16 dev enp0s3 proto dhcp scope link src 10.0.0.170 metric 100

春川的路由表:

# ip r
default via 10.0.0.1 dev enp0s3 proto dhcp src 10.0.0.98 metric 100 
10.0.0.0/24 dev enp0s3 proto kernel scope link src 10.0.0.98 
10.0.0.170 via 10.4.0.2 dev kilo0 proto static onlink 
10.0.0.246 via 10.4.0.3 dev kilo0 proto static onlink 
10.4.0.0/16 dev kilo0 proto kernel scope link src 10.4.0.1 
10.42.0.0/24 via 10.4.0.2 dev kilo0 proto static onlink 
10.42.1.0/24 dev kube-bridge proto kernel scope link src 10.42.1.1 
10.42.2.0/24 via 10.4.0.3 dev kilo0 proto static onlink 
169.254.0.0/16 dev enp0s3 proto dhcp scope link src 10.0.0.98 metric 100

东京的路由表:

# ip r
default via 10.0.0.1 dev enp0s3 proto dhcp src 10.0.0.246 metric 100 
10.0.0.0/24 dev enp0s3 proto kernel scope link src 10.0.0.246 
10.0.0.98 via 10.4.0.1 dev kilo0 proto static onlink 
10.0.0.170 via 10.4.0.2 dev kilo0 proto static onlink 
10.4.0.0/16 dev kilo0 proto kernel scope link src 10.4.0.3 
10.42.0.0/24 via 10.4.0.2 dev kilo0 proto static onlink 
10.42.1.0/24 via 10.4.0.1 dev kilo0 proto static onlink 
10.42.2.0/24 dev kube-bridge proto kernel scope link src 10.42.2.1 
169.254.0.0/16 dev enp0s3 proto dhcp scope link src 10.0.0.246 metric 100

在这里可以看到,这三台机器,已经通过各自的路由,分别都找到了对方。

以下操作都只在主节点上进行了,两台agent节点可以退出终端了。

安装helm部署软件

helm常用于k8s里的软件部署,在k3s里同样需要安装,执行命令:

curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

安装部署nginx-ingress

nginx-ingress 直接使用helm进行安装,执行命令:

helm upgrade --install ingress-nginx ingress-nginx \
  --repo https://kubernetes.github.io/ingress-nginx \
  --namespace ingress-nginx --create-namespace \
  --set controller.service.type=LoadBalancer \
  --set controller.ingressClassResource.default=true \
  --set controller.watchIngressWithoutClass=true

安装部署rancher控制面板

新版本rancher 2.7的安装与2.6一样,都是直接用helm安装就好,不要再用2.6以下的版本啦,区别很大。直接运行以下命令进行安装,需要提前准备的是管理后台域名的证书

首先添加helm的repo

helm repo add rancher-latest https://releases.rancher.com/server-charts/latest
helm repo update

接着将域名证书放在/etc/rancher/cert路径中

# cd /tmp
# tar -zxf cert.tgz
# mkdir -p /etc/rancher/cert
# mv fullchain.pem /etc/rancher/cert
# mv private.pem /etc/rancher/cert

然后创建cattle-system的命名空间和tls密钥

kubectl create namespace cattle-system

kubectl -n cattle-system create secret tls tls-rancher-ingress \
  --cert=/etc/rancher/cert/fullchain.pem \
  --key=/etc/rancher/cert/private.pem

最后安装rancher面板

helm install rancher rancher-latest/rancher \
  --namespace cattle-system \
  --set hostname=cluster.domain.com \
  --set replicas=3 \
  --set ingress.tls.source=secret

说明:

  • –set replicas= 这个值,如果为1,则部署后是随机在集群中的任意节点的,这里一般取值数是你的node数,本例是三台,因此取值为3

等待2分钟后,执行命令获取登录信息,复制粘贴到浏览器打开进行初始化,访问前请先对域名进行解析。

echo https://cluster.domain.com/dashboard/?setup=$(kubectl get secret --namespace cattle-system bootstrap-secret -o go-template='{{.data.bootstrapPassword|base64decode}}')

安装部署Longhorn分布式存储

完成上步对rancher部署后,进入左下角带齿轮图标的 Cluster Tools,找到 Longhorn 点击安装,一路默认点下一步就好,等待安装完成就好。

安装部署velero备份还原组件

velero是k8s下用于备份命名空间下容器的最佳利器,同样也适用于k3s,以下为安装步骤

安装velero

首先从官方github上下载软件进行安装,注意选择arm64的软件架构

# cd /tmp
# wget https://github.com/vmware-tanzu/velero/releases/download/v1.9.0/velero-v1.9.0-linux-arm64.tar.gz
# tar xvf velero-*-linux-*.tar.gz
# cd velero-*-linux-*

复制到运行环境中,检查版本是否为目标版本

# cp velero /usr/local/bin/
# velero version --client-only
Client:
	Version: v1.9.0
	Git commit: 6021f148c4d7721285e815a3e1af761262bff029

配置命令行自动补全

# echo 'source <(velero completion bash)' >> ~/.bashrc
# velero completion bash > /etc/bash_completion.d/velero

配置velero

velero一般使用是搭配s3存储,然后定义好备份时间后,就会在时间到达的时候,自动备份到指定的s3存储,所以在配置velero之前,请先准备一个s3存储服务,可以说aws的s3,也可以是自己搭建的minio服务,首先定义好access_key和secret_key:

cat > credentials-velero << EOF
[default]
aws_access_key_id = fsjDhferKQCZnYtA9h8F
aws_secret_access_key = Fw1Wch7fkS2iKS3S55j1LOxHindEllpOnjUIet2N
EOF

然后定义环境变量,为该s3存储的位置信息和存储桶信息(以下值根据你的服务情况而定)

export S3_CONFIG_BUCKET=velero
export S3_CONFIG_REGION=eu-sto-1
export S3_CONFIG_S3URL=https://s3.amaaws.com

然后开始安装,在这里需要定义k3s的kubeconfig文件,我遵从k8s的使用习惯,是将rancher k3s的配置信息写进本地家路径下的.kube/config中,实际情况你需要根据情况而进行修改

velero --kubeconfig /root/.kube/config install \
    --provider aws \
    --plugins=velero/velero-plugin-for-aws:v1.5.0 \
    --bucket ${S3_CONFIG_BUCKET} \
    --secret-file ./credentials-velero \
    --use-volume-snapshots=false \
    --use-restic \
    --backup-location-config region=${S3_CONFIG_REGION},s3ForcePathStyle="true",s3Url=${S3_CONFIG_S3URL} \
    --prefix velero

验证安装结果,如果有报错,可以在日志中看到的,执行命令:

kubectl logs deployment/velero -n velero

卸载velero

如果配置出错或不想使用velero进行备份了,可以非常方便地进行卸载操作,执行命令:

velero uninstall

使用velero进行单次备份

velero backup create app-1 \
  --include-namespaces app \
  --default-volumes-to-restic

简要说明:

  1. app-1 为本次备份的名称,方便后续查找和恢复,唯一
  2. –include-namespaces app : velero遵从按命名空间进行备份,所有位于该命名空间下的资料都会被当成一个备份条件进行备份
  3. –default-volumes-to-restic : 开启这个选项后,就可以备份到 pvc 里面的内容了,就不仅仅是yaml配置信息,是完整的备份。

tips:可以随时查看备份的详情,例如在备份进行中时,可以使用命令查看进度

velero backup describe app-1

使用velero进行循环定时备份

velero schedule create app-12h \
  --include-namespaces app \
  --default-volumes-to-restic \
  --schedule="@every 12h"

简要说明:

  1. 与单次备份不同,这里使用schedule create,创建一个计划任务的方式创建备份任务
  2. –schedule : 定义了间隔时间,例如 @every 12h,代表间隔12小时备份一次,例如 @daily ,则为每日备份一次

使用velero进行还原

还原操作适用于回档或进行迁移,首先在集群b安装好运行环境和velero后,配置好s3的信息,就可以执行命令获取备份列表:

# velero backup get

执行恢复:

velero restore create --from-backup app-1

配置ModSecurity

在nginx-ingress中,默认已经包含ModSecurity的库,并也有OWASP的规则,只是默认情况下没有开启,我们可以在ingress-nginx的configmaps里,添加配置开启这部分的功能,其他功能可以参考这个网址,酌情开启。

kubectl patch configmaps -n ingress-nginx ingress-nginx-controller -p '{"data":{ "brotli-level": "4","compute-full-forwarded-for": "true","enable-brotli": "true","enable-modsecurity": "true","enable-ocsp": "true","enable-owasp-modsecurity-crs": "true","enable-real-ip": "true","forwarded-for-header": "X-Forwarded-For","gzip-level": "4","max-worker-connections": "65535","modsecurity-snippet": "SecRuleEngine On\n","proxy-add-original-uri-header": "true","proxy-body-size": "0","ssl-buffer-size": "16k","use-forwarded-headers": "true","use-gzip": "true","worker-cpu-affinity": "auto","worker-processes": "auto","worker-rlimit-nofile": "300000"}}'

这里开启后会对所有ingress都起作用,如果不需要modsecurity的,注意可以不用理会这条,不必修改就好

开启modsecurity之后的朋友,还需要对rancher的ingress,关闭功能,防止一些莫名其妙的控制面板报错

kubectl patch ingress -n cattle-system rancher -p '{"metadata": {"annotations": {"nginx.ingress.kubernetes.io/enable-modsecurity": "false","nginx.ingress.kubernetes.io/enable-owasp-core-rules": "false","nginx.ingress.kubernetes.io/modsecurity-snippet": "SecRuleEngine Off\n"}}}'

安装Cert-manager管理证书

直接kubectl 一把梭了,执行:

kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.8.2/cert-manager.yaml

然后给需要分配证书的ns分配发行者,这里我们直接用letsencrypt提供的证书,太方便了

kubectl -n icodex create -f - <<EOF
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
  name: letsencrypt-prod
  namespace: icodex
spec:
  acme:
    email: icodex@msn.com
    privateKeySecretRef:
      name: letsencrypt-prod
    server: https://acme-v02.api.letsencrypt.org/directory
    solvers:
    - http01:
        ingress:
          class: nginx
EOF

然后给域名分配证书

kubectl -n icodex create -f - <<EOF
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: web-domain-com
  namespace: icodex
spec:
  secretName: web-domain-com-tls
  duration: 2160h
  renewBefore: 360h
  commonName: web.domain.com
  isCA: false
  privateKey:
    algorithm: RSA
    encoding: PKCS1
    size: 2048
  dnsNames:
  - web.domain.com
  - app.domain.com
  issuerRef:
    name: letsencrypt-prod
EOF

等待数分钟后,或者通过命令查询证书分配情况,当看到Type:       Ready时,即代表证书已经申请成功,回到ingress那里,给域名指定一个证书就可以了。

至此安装完毕,所有pod如下:

# kubectl get po -A
NAMESPACE                   NAME                                                     READY   STATUS    RESTARTS       AGE
cattle-fleet-local-system   fleet-agent-57497ff7dc-b8kl5                             1/1     Running   0              3h12m
cattle-fleet-system         fleet-controller-5746685958-szdjn                        1/1     Running   0              3h13m
cattle-fleet-system         gitjob-cc9948fd7-xzb75                                   1/1     Running   0              3h13m
cattle-monitoring-system    alertmanager-rancher-monitoring-alertmanager-0           2/2     Running   0              3h7m
cattle-monitoring-system    prometheus-rancher-monitoring-prometheus-0               3/3     Running   0              3h7m
cattle-monitoring-system    pushprox-k3s-server-client-5gck9                         1/1     Running   0              3h7m
cattle-monitoring-system    pushprox-k3s-server-client-hhfj8                         1/1     Running   0              3h7m
cattle-monitoring-system    pushprox-k3s-server-client-pgrbh                         1/1     Running   0              3h7m
cattle-monitoring-system    pushprox-k3s-server-proxy-f4f5d4874-gfkmc                1/1     Running   0              3h7m
cattle-monitoring-system    rancher-monitoring-grafana-57777cc795-2pzs6              3/3     Running   0              3h7m
cattle-monitoring-system    rancher-monitoring-kube-state-metrics-5bc8bb48bd-jmb2j   1/1     Running   0              3h7m
cattle-monitoring-system    rancher-monitoring-operator-f79dc4944-lg8m8              1/1     Running   0              3h7m
cattle-monitoring-system    rancher-monitoring-prometheus-adapter-8846d4757-qcjcd    1/1     Running   0              3h7m
cattle-monitoring-system    rancher-monitoring-prometheus-node-exporter-hq82r        1/1     Running   0              3h7m
cattle-monitoring-system    rancher-monitoring-prometheus-node-exporter-mmp8n        1/1     Running   0              3h7m
cattle-monitoring-system    rancher-monitoring-prometheus-node-exporter-z99jt        1/1     Running   0              3h7m
cattle-system               rancher-7649d589ff-gj894                                 1/1     Running   0              3h14m
cattle-system               rancher-7649d589ff-mm5jx                                 1/1     Running   0              3h14m
cattle-system               rancher-7649d589ff-xfcm7                                 1/1     Running   0              3h14m
cattle-system               rancher-webhook-6958cfcddf-xhqwk                         1/1     Running   0              3h12m
cert-manager                cert-manager-66b646d76-qmxms                             1/1     Running   0              165m
cert-manager                cert-manager-cainjector-59dc9659c7-tzhzm                 1/1     Running   0              165m
cert-manager                cert-manager-webhook-7d8f555998-kh5zl                    1/1     Running   0              165m
icodex                      nginx-6dd7b9db9b-79rdp                                   1/1     Running   0              178m
icodex                      nginx-6dd7b9db9b-cs2tm                                   1/1     Running   0              178m
icodex                      nginx-6dd7b9db9b-w94d8                                   1/1     Running   0              178m
icodex                      php-fpm-5c5758b88-7tcqx                                  1/1     Running   0              178m
icodex                      php-fpm-5c5758b88-kw4pp                                  1/1     Running   0              178m
icodex                      php-fpm-5c5758b88-pgg7n                                  1/1     Running   0              178m
ingress-nginx               ingress-nginx-controller-5b7cf87848-dnbt8                1/1     Running   0              3h31m
ingress-nginx               svclb-ingress-nginx-controller-9fdqg                     2/2     Running   0              3h31m
ingress-nginx               svclb-ingress-nginx-controller-dglh6                     2/2     Running   0              3h31m
ingress-nginx               svclb-ingress-nginx-controller-szs9s                     2/2     Running   0              3h31m
kube-system                 coredns-7796b77cd4-b5gwb                                 1/1     Running   0              5h16m
kube-system                 kilo-5khs9                                               1/1     Running   0              5h5m
kube-system                 kilo-8574c                                               1/1     Running   0              5h3m
kube-system                 kilo-jqw5f                                               1/1     Running   0              5h12m
kube-system                 local-path-provisioner-84bb864455-85dtg                  1/1     Running   0              5h16m
kube-system                 metrics-server-ff9dbcb6c-jk5v2                           1/1     Running   0              5h16m
longhorn-system             csi-attacher-8b4cc9cf6-dj55n                             1/1     Running   0              3h8m
longhorn-system             csi-attacher-8b4cc9cf6-mj78z                             1/1     Running   0              3h8m
longhorn-system             csi-attacher-8b4cc9cf6-n8v7v                             1/1     Running   0              3h8m
longhorn-system             csi-provisioner-59b7b8b7b8-5skdn                         1/1     Running   0              3h8m
longhorn-system             csi-provisioner-59b7b8b7b8-tddz2                         1/1     Running   0              3h8m
longhorn-system             csi-provisioner-59b7b8b7b8-xqzjp                         1/1     Running   0              3h8m
longhorn-system             csi-resizer-68ccff94-gh9fx                               1/1     Running   0              3h8m
longhorn-system             csi-resizer-68ccff94-lxlst                               1/1     Running   0              3h8m
longhorn-system             csi-resizer-68ccff94-rkftz                               1/1     Running   0              3h8m
longhorn-system             csi-snapshotter-6d7d679c98-477s4                         1/1     Running   0              3h8m
longhorn-system             csi-snapshotter-6d7d679c98-bt9ww                         1/1     Running   0              3h8m
longhorn-system             csi-snapshotter-6d7d679c98-qkcff                         1/1     Running   0              3h8m
longhorn-system             engine-image-ei-d474e07c-2nk6r                           1/1     Running   0              3h8m
longhorn-system             engine-image-ei-d474e07c-jqsgl                           1/1     Running   0              3h8m
longhorn-system             engine-image-ei-d474e07c-vh48h                           1/1     Running   0              3h8m
longhorn-system             instance-manager-e-8b411f4a                              1/1     Running   0              3h8m
longhorn-system             instance-manager-e-da92c7e5                              1/1     Running   0              3h8m
longhorn-system             instance-manager-e-fb0588b7                              1/1     Running   0              3h8m
longhorn-system             instance-manager-r-5c615480                              1/1     Running   0              3h8m
longhorn-system             instance-manager-r-9e4dac9d                              1/1     Running   0              3h8m
longhorn-system             instance-manager-r-cfd922a1                              1/1     Running   0              3h8m
longhorn-system             longhorn-csi-plugin-fmc6b                                2/2     Running   0              3h8m
longhorn-system             longhorn-csi-plugin-g62hj                                2/2     Running   0              3h8m
longhorn-system             longhorn-csi-plugin-k7mlz                                2/2     Running   0              3h8m
longhorn-system             longhorn-driver-deployer-7ffd665594-2q8rm                1/1     Running   0              3h9m
longhorn-system             longhorn-manager-55hjs                                   1/1     Running   1 (3h8m ago)   3h9m
longhorn-system             longhorn-manager-mdtn2                                   1/1     Running   1 (3h8m ago)   3h9m
longhorn-system             longhorn-manager-twg2m                                   1/1     Running   0              3h9m
longhorn-system             longhorn-ui-556866b6bb-6wpb7                             1/1     Running   0              3h9m
longhorn-system             share-manager-pvc-7a347acd-b8e8-44df-a2c0-4b4ec54d84fc   1/1     Running   0              3h4m
velero                      restic-8qkjv                                             1/1     Running   0              156m
velero                      restic-b9nfn                                             1/1     Running   0              156m
velero                      restic-jmt9n                                             1/1     Running   0              156m
velero                      velero-79fd55b75d-q68lm                                  1/1     Running   0              156m

最后是完成后的一些图片,目前已经稳定运行半个月。

c40070d1cd165514-1000x517-1

e028c6194a165625-1000x568-1

6e9373d35b174945-1000x535-1

后记:Arm架构的服务器在几个大厂的推动下,取得不错的成绩,在程序方面也有许多开发者做了这部分的兼容,使用起来是没有问题的。未来以arm为代表的精简指令集的soc必将在服务器领域取得不错的成绩的。

创作不易,转载请著名出处,谢谢!

相关推荐: 使用OpenLiteSpeed后如何开启HTTP/3的支持

本文为DirectAdmin面板如何使用OpenLiteSpeed系列的第三章:第一章:DirectAdmin面板如何使用OpenLiteSpeed替代默认的Apache第二章:如果OpenLiteSpeed使用了CloudFlare等CDN如何显示访客的真实…

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 共23条
头像
说说你的看法!
提交
头像

昵称

取消
昵称表情代码图片
    • 头像emengweb0
    • 头像匿名0
    • 头像xxx0
    • 头像qqq0
      • 晨曦的头像 - EVLIT钻石会员晨曦徽章-资深玩家 - EVLIT等级-LV6 - EVLIT作者1
    • 头像白云千载0
      • 晨曦的头像 - EVLIT钻石会员晨曦徽章-资深玩家 - EVLIT等级-LV6 - EVLIT作者0
        • 热门评论
          头像白云千载0
    • 头像白云千载0
    • 头像0.00
    • 头像游离0