赞
踩
GitOps是一种实现持续交付的模型,它的核心思想是将应用系统的声明性基础架构和应用程序存放在Git的版本控制库中。
对于日常维护,我比较关心是否有一个完整的声明,可以反应出 Kubernetes 集群中的资源情况。而不是每个应用去单独描述和发布。我这次使用 Flux 来做练习。
Source
A Source defines the origin of a repository containing the desired state of the system and the requirements to obtain it (e.g. credentials, version selectors). For example, the latest tag available from a Git repository over SSH.
1.x
Reconciliation
Reconciliation refers to ensuring that a given state (e.g. application running in the cluster, infrastructure) matches a desired state declaratively defined somewhere (e.g. a Git repository).
1. 准备一个 Kubernetes 集群,直接使用 Azure 的服务
2. 使用 Az cli 登录,并获取到 access token
- az login -t <租户ID>
- az aks get-credentials -n <集群名称> -g <资源组名称>
3. 查看一下目前集群的信息,也证明我们上一步获取到的 token 是正确的
4. 我们这次动手实验选用的 GitOps 工具是 Flux ,首先安装他的 cli ,用管理员执行以下命令。
choco install flux
检查一下是否安装成功
5. 创建一个用于管理代码的 repo ,虽然初始化的时候可以自动创建,不过考虑到一会儿需要准备的个人访问令牌的权限问题,我还是提前手动创建好。创建好的 repo 如下:
6. 准备 Github 个人访问令牌
7. 启动 Flux
- flux bootstrap github `
- --owner=mayong43111 `
- --repository=dapr-aks-poc `
- --branch=main `
- --path=./clusters/dapr-cluster `
- --personal
安装完效果如下:
检查 repo ,发现新增加了一些文件
8. 将源代码 clone,并在本地计算机执行命令添加示例
- flux create source git podinfo `
- --url=https://github.com/stefanprodan/podinfo `
- --branch=master `
- --interval=30s `
- --export > ./clusters/dapr-cluster/podinfo-source.yaml
提交代码仓库
git add -A && git commit -m "add dev cluster" && git push
9. 增加一个部署
- flux create kustomization podinfo `
- --target-namespace=default `
- --source=podinfo `
- --path="./kustomize" `
- --prune=true `
- --interval=5m `
- --export > ./clusters/dapr-cluster/podinfo-kustomization.yaml
10. 启动监视
flux get kustomizations --watch
11. 提交代码
- git add -A && git commit -m "Add podinfo Kustomization"
- git push
并观测到变化
查看 workload
1. 增加一个自己的源,这里使用的是 GitRepository
- flux create source git dapr-poc `
- --url=https://github.com/mayong43111/dapr-aks-poc `
- --branch=main `
- --interval=30s `
- --export > ./clusters/dapr-cluster/dapr-source.yaml
2. 在代码库根目录下增加一个 aspnetapp.yaml 文件
- apiVersion: v1
- kind: Pod
- metadata:
- name: aspnetapp
- labels:
- app: aspnetapp
- spec:
- containers:
- - image: "mcr.microsoft.com/dotnet/core/samples:aspnetapp"
- name: aspnetapp-image
- ports:
- - containerPort: 80
- protocol: TCP
-
- ---
-
- apiVersion: v1
- kind: Service
- metadata:
- name: aspnetapp
- spec:
- selector:
- app: aspnetapp
- ports:
- - protocol: TCP
- port: 80
- targetPort: 80
-
- ---
-
- apiVersion: networking.k8s.io/v1
- kind: Ingress
- metadata:
- name: aspnetapp
- annotations:
- kubernetes.io/ingress.class: azure/application-gateway
- spec:
- rules:
- - http:
- paths:
- - path: /
- backend:
- service:
- name: aspnetapp
- port:
- number: 80
- pathType: Exact
3. 增加一个 Reconciliation ,这里使用的是 Kustomization
- flux create kustomization dapr-poc `
- --target-namespace=dapr-poc `
- --source=dapr-poc `
- --path="./dapr" `
- --prune=true `
- --interval=5m `
- --export > ./clusters/dapr-cluster/dapr-kustomization.yaml
查看结果,发现出现了一个错误,找不到名称为 dapr-poc 的 namespace
4. 在 dapr 文件夹下增加 namespace.yaml
- apiVersion: v1
- kind: Namespace
- metadata:
- name: dapr-poc
5. 这次通过命令查看
kubectl -n dapr-poc get pods,deployments,services
本次动手实验结束。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。