首页

没有首页

Docker 部署 Rancher 指定镜像仓库

docker 启动的 rancher 默认会走公网获取镜像,添加了 CATTLE_SYSTEM_DEFAULT_REGISTRY 的话,helm-operation 使用的 rancher/shell 等还是会走到公网,如果要所有镜像都是用 private registry,可以通过下面的方式。

准备 private registry 认证的配置文件和 k3s 配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mkdir -p /etc/rancher/k3s

cat <<EOF > /etc/rancher/k3s/registries.yaml
configs:
"harbor.warnerchen.com":
auth:
username: xxx
password: xxx
tls:
insecure_skip_verify: true
EOF

cat <<EOF > /etc/rancher/k3s/config.yaml
system-default-registry: harbor.warnerchen.com
EOF

启动 rancher:

1
2
3
4
5
6
7
8
9
docker run -d --restart=unless-stopped --name rancher \
-v /var/lib/rancher:/var/lib/rancher \
-v /etc/rancher/k3s/registries.yaml:/etc/rancher/k3s/registries.yaml:ro \
-v /etc/rancher/k3s/config.yaml:/etc/rancher/k3s/config.yaml:ro \
-e CATTLE_BOOTSTRAP_PASSWORD=RancherForFun \
-e CATTLE_SYSTEM_DEFAULT_REGISTRY=harbor.warnerchen.com \
-p 80:80 -p 443:443 \
--privileged \
harbor.warnerchen.com/prime/rancher:v2.7.15-ent

RKE2 Calico 指定网卡

calico-node 的 IP_AUTODETECTION_METHOD 默认使用 first-found,如果节点存在多张网卡的时候,可能导致 calico-node 绑定到错误的网卡上,导致跨节点网络不通。

可以通过修改 IP_AUTODETECTION_METHOD 为 interface 或者 cidrs 来指定 calico-node 绑定到指定网卡上。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
cat <<EOF | kubectl apply -f -
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
name: rke2-calico
namespace: kube-system
spec:
valuesContent: |-
global:
cattle:
clusterId: "xxx"
installation:
calicoNetwork:
nodeAddressAutodetectionV4:
interface: "ens34"
# 也可以使用 cidrs,interface 和 cidrs 不能同时使用
cidrs:
- "172.16.16.0/24"
EOF

Rancher Elemental 使用随记

简介

Rancher Elemental 用于快速部署和管理基于容器的操作系统,如 SLE Micro 和 openSUSE MicroOS。它专为边缘计算和云原生环境设计,可以提供极简、易维护的操作系统。

组件:

  1. elemental:负责操作系统安装、更新和维护的命令行工具
  2. elemental-operator:运行于 kubernetes 中,用于管理设备注册和生命周期
  3. elemental-register:运行于设备中,用于将设备与 Rancher Elemental 集群注册
  4. elemental-system-agent:负责设备的配置应用和生命周期管理

CRD:

  1. MachineRegistration:定义设备如何注册到 Rancher Elemental 集群,并提供初始化配置
  2. MachineInventory:记录注册设备的详细信息,包括硬件属性和状态
  3. MachineInventorySelector:用于选择一组符合特定标签或条件的设备
  4. MachineInventorySelectorTemplate:用于生成 MachineInventorySelector,支持动态创建设备分组规则
  5. ManagedOSImage:描述和管理设备可用的操作系统镜像信息
  6. ManagedOSVersion:定义操作系统版本及其支持的功能和变更点
  7. ManagedOSVersionChannel:管理操作系统版本更新的分发渠道
  8. SeedImage:用于创建安装介质,将 Elemental 安装到节点上

使用随记

在 Rancher Extension 安装 Elemental

添加一个 OS Channel

1
2
3
4
5
6
7
8
9
10
11
apiVersion: elemental.cattle.io/v1beta1
kind: ManagedOSVersionChannel
metadata:
name: sl-micro-6.0-base-channel
namespace: fleet-default
spec:
deleteNoLongerInSyncVersions: false
options:
image: registry.suse.com/rancher/elemental-channel/sl-micro:6.0-base
syncInterval: 1h
type: custom

创建一个 MachineRegistration,Cloud Configuration 可以根据需求自定义,例如设置主机名、网络配置等

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
apiVersion: elemental.cattle.io/v1beta1
kind: MachineRegistration
metadata:
name: elemental-cluster-1
namespace: fleet-default
spec:
config:
cloud-config:
users:
- name: root
passwd: password
ssh-authorized-keys:
- >-
ssh-rsa xxx
write_files:
- content: |
BOOTPROTO='static'
IPADDR='172.16.16.141'
NETMASK='255.255.255.0'
GATEWAY='172.16.16.1'
DNS='172.16.16.12'
STARTMODE='auto'
path: /etc/sysconfig/network/ifcfg-eth0
permissions: '0600'
elemental:
install:
debug: true
device: /dev/sda
reboot: true
snapshotter:
type: loopdevice
reset:
reboot: true
reset-oem: true
reset-persistent: true
machineInventoryLabels:
author: warner
machineUUID: ${System Information/UUID}
manufacturer: ${System Information/Manufacturer}
productName: ${System Information/Product Name}
serialNumber: ${System Information/Serial Number}

创建完后,选择对应的 OS Version 构建镜像,点击构建后在 fleet-default 命名空间下会生成一个 pod,用于 base image 拉取、镜像构建、生成镜像下载地址

在界面下载构建好的 ISO,也可以通过 SeedImage CRD 获取下载地址

1
kubectl -n fleet-default get seedimages.elemental.cattle.io media-image-reg-xxx -ojsonpath={.status.downloadURL}

下载好后就可以通过这个 ISO 创建虚拟机,OS 安装过程中需要用到 TPM,所以需要在 vSphere 中开启本机类型的 TPM

vSphere 开启本机类型的 TPM 有两个前提:

  1. vSphere 需要配置域名,否则创建好后会无法进行 TPM 备份,无法备份的话就无法给虚拟机添加 TPM 设备
  2. 创建虚拟机所在的主机需要在一个集群中,否则添加 TPM 设备后会无法创建

以上条件具备后,即可创建虚拟机,引导需要选择 EFI 模式

开机后就会自动进行 OS 安装,并注册到 Rancher Elemental 集群中,可以在节点上通过命令查看注册状态

1
journalctl -f -u elemental-register-install.service

注册没问题的话,会生成一个 MachineInventory,记录设备的详细信息

接着就可以用这个节点创建集群

使用 Istio 实现应用迁移

背景:当前环境中有 Cluster A 和 Cluster B,各自部署了相同的应用,且该应用有两个域名用于处理不同的请求。目前,这两个域名的请求都由 Cluster A 中的应用处理。为进行应用迁移,现希望将域名 A 的请求继续由 Cluster A 处理,而域名 B 的请求则切换至由 Cluster B 中的应用来处理。

由于目前的流量处理都是由 Istio 负责,所以可以通过 ServiceEntry 来实现此需求。

创建一个 ServiceEntry:

将 b.nginx.com 的流量转发到 Cluster B 的 Istio Ingress Gateway,然后再通过 Cluster B 的 VirtualService 将流量转发到 Cluster B 中的应用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
name: external-nginx
namespace: default
spec:
addresses: {}
endpoints:
# 此处为 Cluster B 的 Istio Ingress Gateway 的地址和端口
- address: 172.16.0.104
ports:
http: 80
hosts:
- b.nginx.com
location: MESH_EXTERNAL
ports:
- name: http
number: 80
protocol: HTTP
resolution: DNS

修改原有的 VirtualService 中处理域名 B 流量的部份:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: nginx-virtualservice
namespace: default
spec:
gateways:
- http-gateway.istio-system.svc.cluster.local
hosts:
- a.nginx.com
- b.nginx.com
http:
- match:
- headers:
host:
exact: a.nginx.com
route:
- destination:
host: nginx.default.svc.cluster.local
port:
number: 80
- match:
- headers:
host:
exact: b.nginx.com
route:
- destination:
# 此处原本为 nginx.default.svc.cluster.local,如果要做迁移将其修改为 b.nginx.com 即可
host: b.nginx.com
port:
number: 80

尝试请求查看效果: