使用Flux构建GitOps
使用Flux实现GitOps建设。
序章: はじめに
GitOpsとは?
Fluxの概要
第一章: チュートリアル
前提条件
1. Fluxのインストール
2. Fluxの設定
3. Railsアプリケーションのデプロイ
4. Fluxによる変更の検出とデプロイ
第二章: トラブルシューティング
引言:首先
GitOps 是什么?
GitOps是一种将Git仓库视为唯一真实信息源,并基于该仓库中的清单进行基础设施和应用部署的方法。
Flux的概述
Flux是在Kubernetes集群中运行的开源GitOps工具。它会自动检测并基于Git仓库的更改来更新Kubernetes资源。
第一章:新手指南
前提条件:
-
- Kubernetes集群正常运行。
-
- 已安装kubectl,并能够访问集群。
-
- 存在Git仓库(例如:GitHub),其中存储了Rails应用程序的Kubernetes清单。
- Docker和docker-compose的配置是根据这篇文章创建的。
1. 安装Flux:
安装Flux的命令:
curl -s https://fluxcd.io/install.sh | sh
接下来,将Flux的自定义资源部署到Kubernetes集群中。
kubectl apply -f https://github.com/fluxcd/flux2/releases/latest/download/install.yaml
2. Flux的配置:
连接仓库与Flux的步骤:
flux bootstrap github \
--owner=[GITHUB_USERNAME] \
--repository=[REPO_NAME] \
--branch=main \
--path=./kubernetes \
--personal
当使用Flux v2的flux bootstrap命令时,如果被要求提供GitHub的个人访问令牌(Personal Access Token, PAT),那么该令牌需要特定范围的权限。
通常情况下,以下范围的权限是需要的:
-
- repo: 通过这个权限,可以访问私人库。
read:org: 可以读取组织的成员信息。
write:public_key: 可以添加、列出或删除用户的公钥或组织的公钥。
read:public_key: 可以读取用户的公钥或组织的公钥。
在Flux克隆GitHub存储库、检测存储库的更改以及为Flux添加SSH公钥到存储库时,这些范围是必要的。
请注意:创建令牌时,请仅授予所需的权限。授予不必要的权限可能会增加安全风险。同时,请安全地保存生成的令牌。
3. Rails应用的部署:
将Rails应用程序的Kubernetes清单添加到Git存储库中。
# ./kubernetes/rails-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: rails-deployment
spec:
replicas: 3
selector:
matchLabels:
app: rails-app
template:
metadata:
labels:
app: rails-app
spec:
containers:
- name: rails
image: [YOUR_RAILS_IMAGE_NAME]:[TAG]
ports:
- containerPort: 3000
将这个清单提交并推送到代码库。
4. 通过Flux来检测和部署变更。
Flux会定期轮询仓库的变更,并在检测到新变更时更新相应的Kubernetes资源。
对源代码进行重新同步和确认
为了手动应用更改,请使用以下命令。
flux reconcile source git [GIT_REPOSITORY_NAME]
第二章:故障排除
常见的问题及解决办法
如果kubectl get deployments命令的输出不显示所期望的部署情况,可能有几个原因。请尝试以下故障排除步骤。
-
- 检查Flux的同步状态:要确认Flux是否正确检测到了Git仓库的更改,可以使用以下命令。
-
- flux get sources git
检查Kustomization:为了让Flux将仓库的清单应用到集群中,需要Kustomization资源。让我们检查一下Kustomization的状态。
flux get kustomizations
检查Flux的日志:通过检查Flux Pod的日志,可以查看是否存在任何错误或警告。
kubectl logs -n flux-system deployment/flux-controller
检查Git仓库的清单:确认Git仓库中的Kubernetes清单是否正确。可能由于错误的清单、缺少资源或无效的值导致部署未被创建。
检查Kubernetes事件:检查集群事件,查看是否存在任何错误或警告。这可能会揭示资源未正确创建的原因。
kubectl get events –sort-by=’.metadata.creationTimestamp’