文档章节

GitOps实操工具-Flux安装与设置

openthings
 openthings
发布于 2018/06/09 08:28
字数 1367
阅读 236
收藏 0

GitOps实操工具-Flux安装与设置

Flux是一个通过git管理和同步Kubernetes部署状态的支持GitOps的工具,用于完成Docker镜像库与Kubernetes运行时的CD(持续交付)阶段工作的自动化。如下图所示:

Flux 包含几个部分:

  • 命令行客户端 fluxctl。
  • daemon服务实例,flux 运行在集群中,维护集群的状态。
  • service, 运行在 Weave Cloud。

你不需要最后一个就能使用 Flux; 只需要运行daemon然后通过命令行客户端工具连接即可。

快速安装

复制Flux repo并且编辑示范配置文件,位于 deploy/flux-deployment.yaml. 然后应用所有 deploy directory下的配置文件。

$EDITOR ./deploy/flux-deployment.yaml
kubectl apply -f ./deploy

Helm 用户

创建所有的资源,定义在 deploy-helm 目录,如下:

$EDITOR ./deploy-helm/helm-operator-deployment.yaml
kubectl apply -f ./deploy-helm

下一步,下载fluxctl 客户端的最新版本,在 github.

细节描述

该部署安装Flux和其依赖。首先,进入示范配置的目录。

注意

Helm用户需要 deploy-helm 目录。

cd deploy

Memcache

Flux 使用 memcache 来cache docker registry requests.

kubectl create -f memcache-dep.yaml -f memcache-svc.yaml

Flux deployment

你需要创建一个secret,其中 Flux 将存储其SSH key。没有该参数,daemon将不会启动。

kubectl create -f flux-secret.yaml

该 Kubernetes 部署配置文件 flux-deployment.yaml运行 Flux daemon,但需要首先编辑一下,至少提供你自己的configuration repo (即 --git-repo 参数)。

$EDITOR flux-deployment.yaml
kubectl create -f flux-deployment.yaml

对于 Kubernetes >=1.6 的访问控制 (RBAC)

你需要给fluxd提供service account,使其能够访问希望使用Flux的 namespaces。查看 flux-account.yaml 中的服务账户(which puts essentially no constraints on the account) 以及RBAC documentation, 以及创建服务账户,在你放置Flux的namespace之中,你需要修改 namespace: default 一行,如果直接采用这个例程。

你需要明确地告诉fluxd 使用这个服务账户,通过去掉文件fluxd-deployment.yaml中这一行的注释 # serviceAccountName: flux 

Flux API service

为了使 pod对于命令行客户端 fluxctl可以访问,你需要将集群中的API暴露出来。

一个简单的方法是使用 kubectl port-forward,赋予存取 Kubernetes API的权限。

fluxpod=$(kubectl get pod -l name=flux -o name | awk -F / '{ print $2; }')
kubectl port-forward "$fluxpod" 10080:3030 &
export FLUX_URL="http://localhost:10080/api/flux"
fluxctl list-controllers --all-namespaces

Local endpoint

须知: 这里暴露出的 Flux API, 是非授权的,是通过非安全的通道。除非你完全在本地局域网上,否则不要进行此操作。而且,只是为了试验、验证工作。

如果运行 Flux 在本地环境,比如说 minikube,你可以使用基于 NodePort的service。

一个示范的 manifest为 flux-nodeport.yaml

然后你可以通过 NodePort访问 API,获取端口方法如下 (假定用的是minikube):

fluxport=$(kubectl get svc flux --template '{{ index .spec.ports 0 "nodePort" }}')
export FLUX_URL="http://$(minikube ip):$fluxport/api/flux"
fluxctl list-controllers --all-namespaces

fluxctl

这将允许你通过命令行控制 Flux ,如果没有通过 Weave Cloud连接,这是唯一的与Flux交互的方式。

 github 下载最新的fluxctl版本。

Helm operator (Helm users only)

Kubernetes deployment configuration 文件 helm-operator-deployment.yaml 运行helm operator, 但需要首先编辑,至少提供configuration repo (提供 --git-repo 用于 flux 以及 --git-charts-path 参数)。

$EDITOR helm-operator-deployment.yaml
kubectl create -f flux-helm-release-crd.yaml -f helm-operator-deployment.yaml

连接 fluxctl 到 daemon

你需要告诉fluxctl到哪里找到 Flux API。如果你使用minikube,你可以获得host的 IP address和port,如下:

$ flux_host=$(minikube ip)
$ flux_port=$(kubectl get svc flux --template '{{ index .spec.ports 0 "nodePort" }}')
$ export FLUX_URL=http://$flux_host:$flux_port/api/flux

输出 FLUX_URL 对 fluxctl 就足够了,也可以每次通过--url参数来指定。

定制daemon配置

连接flux到repository

你需要连接 flux 到 Kubernetes manifests存放的repository。通过设置 --git-url--git-branch 参数来实现,位于 flux-deployment.yaml 文件中的manifest。

Helm 用户

需要连接 helm-operator 到同样的 repository,将 helm-operator 指向包含Charts的 git path。这通过为Flux设置 --git-url 和 --git-branch 参数,同样设置 --git-charts-path 参数,在helm-operator-deployment.yaml manifest之中。

添加SSH deploy key到repository

Flux连接到repository需要使用SSH key。有两个选项:

1. 允许 flux为你创建 key。

如果没有指定需要使用的key,Flux 将创建一个。可以通过fluxctl获得public key:

$ fluxctl identity
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDCN2ECqUFMR413CURbLBcG41fLY75SfVZCd3LCsJBClVlEcMk4lwXxA3X4jowpv2v4Jw2qqiWKJepBf2UweBLmbWYicHc6yboj5o297//+ov0qGt/uRuexMN7WUx6c93VFGV7Pjd60Yilb6GSF8B39iEVq7GQUC1OZRgQnKZWLSQ==
0c:de:7d:47:52:cf:87:61:52:db:e3:b8:d8:1a:b5:ac
+---[RSA 1024]----+
|            ..=  |
|             + B |
|      .     . +.=|
|     . + .   oo o|
|      . S . .o.. |
|           .=.o  |
|           o =   |
|            +    |
|           E     |
+------[MD5]------+

可选地,你可以在flux log中看见public key。

该public key需要给到托管Git repository的。例如,在GitHub 创建一个SSH deploy key在repository之中,把这个public key给相应的参数。

该 flux logs将显示连接到的 repository以及正在同步的cluster。

当使用Kubernetes,该key作为 Kubernetes secret而存储。你可以重新启动flux,将能够继续使用同样的key。

2. 指定使用的key

从private key创建Kubernetes Secret:

kubectl create secret generic flux-git-deploy --from-file /path/to/identity

现在该secret 到 flux-deployment.yaml manifest文件中:

    ...
    spec:
      volumes:
      - name: git-key
        secret:
          secretName: flux-git-deploy

然后为容器添加 volume mount:

    ...
    spec:
      containers:
      - name: fluxd
        volumeMounts:
        - name: git-key
          mountPath: /etc/fluxd/ssh

可以通过参数来定制选择的key的paths 和 names (examples使用缺省值),分别为:--k8s-secret-name=flux-git-deploy--k8s-secret-volume-mount-path=/etc/fluxd/ssh 以及 --k8s-secret-data-key=identity。

使用 SSH key 允许你维持对 repository的控制。你可以任何时候收回flux对该 repository的控制,通过移除该 deploy key即可。

© 著作权归作者所有

openthings
粉丝 320
博文 1129
码字总数 675031
作品 1
东城
架构师
私信 提问
GitOps——像代码一样管理Istio配置

GitOps——像代码一样管理Istio配置 本文译自Weaveworks 官方博客: https://www.weave.works/blog/gitops-for-istio-manage-istio-config-like-code 本文来源,https://mp.weixin.qq.com/s/......

openthings
2018/06/02
378
0
Archsummit 2019重磅分享|闲鱼Flutter&FaaS云端一体化架构 | 7月19号云栖夜读

点击订阅云栖夜读日刊,专业的技术干货,不容错过! 阿里专家原创好文 1.Archsummit 2019重磅分享|闲鱼Flutter&FaaS云端一体化架构 国有,闲鱼架构团队负责人。在7月13号落幕的2019年Archs...

yq传送门
07/19
0
0
Flux 会取代 Web MVC,或可不再基于 Servlet 容器了?

对 Java 开发者来说,2017 年 9 月是个热闹的月份不但 Java SE 9、Java EE 8 相继发布,就连 Spring 框架,也在这段时间发布 5.0 正式版。 而新版 Spring 的一大特色,就是 Reactive Web 方案...

周其
2018/04/02
16.3K
22
GitOps — Git Push 一切

在当今竞争激烈的环境中,你需要在不影响质量的情况下快速交付软件特性。但是对于大多数组织来说,能跟上当前最新的版本管理实践技术,并能和传统的操作过程和谐共存是很困难的。 现在,随着...

openthings
2018/09/03
41
0
GitOps —— Git Push 一切

在当今竞争激烈的环境中,你需要在不影响质量的情况下快速交付软件特性。但是对于大多数组织来说,能跟上当前最新的版本管理实践技术,并能和传统的操作过程和谐共存是很困难的。现在,随着开...

oschina
2018/08/27
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

只需一步,在Spring Boot中统一Restful API返回值格式与统一处理异常

统一返回值 在前后端分离大行其道的今天,有一个统一的返回值格式不仅能使我们的接口看起来更漂亮,而且还可以使前端可以统一处理很多东西,避免很多问题的产生。 比较通用的返回值格式如下:...

晓月寒丶
昨天
59
0
区块链应用到供应链上的好处和实际案例

区块链可以解决供应链中的很多问题,例如记录以及追踪产品。那么使用区块链应用到各产品供应链上到底有什么好处?猎头悬赏平台解优人才网小编给大家做个简单的分享: 使用区块链的最突出的优...

猎头悬赏平台
昨天
28
0
全世界到底有多少软件开发人员?

埃文斯数据公司(Evans Data Corporation) 2019 最新的统计数据(原文)显示,2018 年全球共有 2300 万软件开发人员,预计到 2019 年底这个数字将达到 2640万,到 2023 年达到 2770万。 而来自...

红薯
昨天
65
0
Go 语言基础—— 通道(channel)

通过通信来共享内存(Java是通过共享内存来通信的) 定义 func service() string {time.Sleep(time.Millisecond * 50)return "Done"}func AsyncService() chan string {retCh := mak......

刘一草
昨天
58
0
Apache Flink 零基础入门(一):基础概念解析

Apache Flink 的定义、架构及原理 Apache Flink 是一个分布式大数据处理引擎,可对有限数据流和无限数据流进行有状态或无状态的计算,能够部署在各种集群环境,对各种规模大小的数据进行快速...

Vincent-Duan
昨天
60
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部