云原生实践(二):Kubernetes GitOps 动手实验

背景

GitOps是一种实现持续交付的模型,它的核心思想是将应用系统的声明性基础架构和应用程序存放在Git的版本控制库中。

对于日常维护,我比较关心是否有一个完整的声明,可以反应出 Kubernetes 集群中的资源情况。而不是每个应用去单独描述和发布。我这次使用 Flux 来做练习。

Flux 核心概念

云原生实践(二):Kubernetes GitOps 动手实验_第1张图片

Source

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 的服务

云原生实践(二):Kubernetes GitOps 动手实验_第2张图片

2. 使用 Az cli 登录,并获取到 access token

az login -t <租户ID>
az aks get-credentials -n <集群名称> -g <资源组名称>

3. 查看一下目前集群的信息,也证明我们上一步获取到的 token 是正确的

云原生实践(二):Kubernetes GitOps 动手实验_第3张图片4. 我们这次动手实验选用的 GitOps 工具是 Flux ,首先安装他的 cli ,用管理员执行以下命令。 

choco install flux

云原生实践(二):Kubernetes GitOps 动手实验_第4张图片

检查一下是否安装成功

5. 创建一个用于管理代码的 repo ,虽然初始化的时候可以自动创建,不过考虑到一会儿需要准备的个人访问令牌的权限问题,我还是提前手动创建好。创建好的 repo 如下: 

云原生实践(二):Kubernetes GitOps 动手实验_第5张图片

6. 准备 Github 个人访问令牌

云原生实践(二):Kubernetes GitOps 动手实验_第6张图片

7. 启动 Flux 

flux bootstrap github `
--owner=mayong43111 `
--repository=dapr-aks-poc `
--branch=main `
--path=./clusters/dapr-cluster `
--personal

安装完效果如下:

云原生实践(二):Kubernetes GitOps 动手实验_第7张图片

检查 repo ,发现新增加了一些文件

云原生实践(二):Kubernetes GitOps 动手实验_第8张图片

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

并观测到变化

云原生实践(二):Kubernetes GitOps 动手实验_第9张图片

查看 workload

云原生实践(二):Kubernetes GitOps 动手实验_第10张图片

扩展练习

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

本次动手实验结束。

你可能感兴趣的:(云原生,kubernetes,云原生,java)