Home avatar

蜷缩的蜗牛

专注云原生运维

Karmada管理Openkruise自定义资源示例

CloneSet 原地升级示例

 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
42
43
44
45
46
47
cat << EOF  | kubectl apply -f - --kubeconfig karmada-primary
apiVersion: apps.kruise.io/v1alpha1
kind: CloneSet
metadata:
  labels:
    app: nginx
  name: nginx
spec:
  replicas: 5
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
        test: mytest
    spec:
      containers:
      - name: nginx
        image: nginx:alpine
        env:
        - name: test
          valueFrom:
            fieldRef:
              fieldPath: metadata.labels['test']
  updateStrategy:
    type: InPlaceIfPossible
---
apiVersion: policy.karmada.io/v1alpha1
kind: PropagationPolicy
metadata:
  name: nginx
spec:
  resourceSelectors:
    - apiVersion: apps.kruise.io/v1alpha1
      kind: CloneSet
      name: nginx
  placement:
    clusterAffinity:
      clusterNames:
        - primary
        - secondary
    replicaScheduling:
      replicaDivisionPreference: Weighted
      replicaSchedulingType: Divided
EOF

修改cloneset,触发原地升级

1
kubectl patch cloneset nginx --type merge -p '{"spec":{"template":{"metadata":{"labels":{"test":"test1"}}}}}' --kubeconfig karmada-primary
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# kubectl  get cloneset --kubeconfig karmada-primary
NAME    DESIRED   UPDATED   UPDATED_READY   READY   TOTAL   AGE
nginx   5         10        10              10      10      6m12s
# kubectl get pod --kubeconfig secondary
NAME          READY   STATUS    RESTARTS      AGE
nginx-729jm   1/1     Running   1 (23s ago)   2m
nginx-9wjbd   1/1     Running   1 (5s ago)    2m
nginx-cwxlq   1/1     Running   1 (14s ago)   2m
nginx-drsft   1/1     Running   1 (33s ago)   2m
nginx-g674t   1/1     Running   1 (43s ago)   2m
# kubectl get pod --kubeconfig primary
NAME          READY   STATUS    RESTARTS      AGE
nginx-4fjfq   1/1     Running   1 (16s ago)   2m3s
nginx-82gmf   1/1     Running   1 (7s ago)    2m3s
nginx-qt8kl   1/1     Running   1 (36s ago)   2m3s
nginx-vrbnc   1/1     Running   1 (46s ago)   2m3s
nginx-xx2c4   1/1     Running   1 (26s ago)   2m3s

CloneSet 分批灰度

设置升级保留个数

由于 karmada 调度分发策略只针对replicas运算,其他字段是完全拷贝,所以在设置 partition 来实现分批灰度是需要考虑到每个成员集群副本数,不然可能会导致灰度更新失效。 比如: Cloneset 全局设置副本5,但是根据设置的调度策略分发到两个A、B集群是2个和3个;此时如果设置 partition: 2 时,那么A集群的pod不会触发更新,B集群更新一个,如果设置 partition: 3 时,那么A、B集群都不会触发更新,无法达到灰度更新效果。

用vscode脚本创建hugo文章

我通常使用VSCODE进行开发和记录笔记,书写文章标题是中文在浏览器上显示不是特别友好,考虑了这一点,我使用了以下脚本,将文件名保留中文,文章标题转换为英文,提高文章的可读性。

Karmada多集群管理高可用部署

Karmada 多集群管理高可用部署

实验环境:

  • kind 创建两套Kubernetes集群
  • docker 运行一套额外的 ETCD 集群

Karmada Ha

从图中可以看到整个 Karmada 集群的单点是ETCD,实验环境部署单节点ETCD集群模拟实验,实际生产环境部署跨多可用区的ETCD集群,以保证高可用。

环境准备

1
2
3
4
5
6
wget https://github.com/cloudflare/cfssl/releases/download/v1.6.4/cfssl_1.6.4_linux_amd64
wget https://github.com/cloudflare/cfssl/releases/download/v1.6.4/cfssljson_1.6.4_linux_amd64

chmod +x cfssl_1.6.4_linux_amd64 cfssljson_1.6.4_linux_amd64
mv cfssl_1.6.4_linux_amd64 /usr/local/bin/cfssl
mv cfssljson_1.6.4_linux_amd64 /usr/local/bin/cfssljson

Docker多架构镜像编译

随着arm64架构的普及,越来越多的开发者使用arm64架构的服务器,但是x86_64架构的服务器仍然流行,那么在构建镜像过程中就需要支持多种架构的镜像。本文将介绍2种方式在 Docker 中构建多架构镜像。

04-Kube-Controller-Manager源码分析(EndpointSlice控制器)

本文基于1.29.0版本

背景

kubernetes 1.16版本中,EndpointSlice 作为 alpha 特性被引入,主要用于解决 Endpoints 资源可伸缩性改进、双堆栈服务和拓扑感知路由等问题,在Kubernetes 1.19版本之后默认启用,并在1.21版本后EndpointSlice API 版本改为 discovery.k8s.io/v1

0%