/logo_transparent.png

蜷缩的蜗牛

专注云原生运维

定时任务launchctl

在家和办公室写了一些笔记,有时候在书写过程中因为各种原因思路中断,等回到家有一些思路的时候发现办公室的笔记忘记提交到 Github 仓库,所以写了一个定时任务,每天在下班时间定时提交。

Kyverno快速体验

安装CLI

1
2
3
export version=1.6.0
wget https://github.com/kyverno/kyverno/releases/download/v${version}/kyverno-cli_v${version}_darwin_arm64.tar.gz
tar zxf kyverno-cli_v${version}_darwin_arm64.tar.gz

通过标签匹配命名空间Pods

此处包含两个规则,两个规则联动

Containerd常用命令

Containerd常用命令

crictl 常用命令

查看所有容器

1
crictl ps

查看运行中的容器详细信息

1
crictl inspect [CONTAINER_ID_OR_NAME]

进入容器内部执行命令

1
crictl exec -it CONTAINER_ID bash

拉取镜像

1
crictl pull <image-name>:<tag>

列出已下载的镜像

1
crictl images

创建并启动容器

1
2
3
cat pod-config.json | crictl runp # 创建PodSandbox
crictl create --pod POD_ID CONTAINER_CONFIG_PATH # 创建容器
crictl start CONTAINER_ID # 启动容器

停止并删除容器

1
2
crictl stop CONTAINER_ID
crictl rm CONTAINER_ID

清理未使用的镜像和沙箱

1
2
crictl rmi IMAGE_ID # 删除指定镜像
crictl pods --quiet | xargs crictl rm # 删除所有已停止的PodSandboxes

Pull指定账号密码

1
crictl pull --creds username:password  registry.kbsonlong.com/sysreport:latest

ctr 常用命令

查看容器列表

1
   ctr -n <namespace> containers ls

运行容器

1
2
3
4
5
   ctr -n k8s.io run --id <container-id> --net-host --null-io -d \
     --env PASSWORD=$drone_password \
     --mount type=bind,src=/etc,dst=/host-etc,options=rbind:rw \
     --mount type=bind,src=/root/.kube,dst=/root/.kube,options=rbind:rw \
     $image sysreport bash /sysreport/run.sh

这条命令在指定命名空间下运行一个新的容器,并且:

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集群都不会触发更新,无法达到灰度更新效果。

0%