K8s之spinnaker

一、spinnaker概述

1、spinnaker是netflix开源的一款云发布CI/CD,其前身是Asgard,spinnaker支持各种部署目标,包括OpenStack、DC/OS、Kubernetes 和 Cloud Foundry等。

2、功能概述
  & 通过灵活和可配置 Pipelines,实现可重复的自动化部署;
  & 提供所有环境的全局视图,可随时查看应用程序在其部署 Pipeline 的状态;
  & 通过一致且可靠的 API ,提供可编程配置;
  & 易于配置、维护和扩展;
  & 具有操作伸缩性;
  & 兼容 Asgard 特性,原用户不用迁移。

3、组件概述

  
  & Deck:面向用户 UI 界面组件,提供直观简介的操作界面,可视化操作发布部署流程。
  & API: 面向调用 API 组件,我们可以不使用提供的 UI,直接调用 API 操作,由它后台帮我们执行发布等任务。
  & Gate:是 API 的网关组件,可以理解为代理,所有请求由其代理转发。
  & Rosco:是构建 beta 镜像的组件,需要配置 Packer 组件使用。
  & Orca:是核心流程引擎组件,用来管理流程。
  & Igor:是用来集成其他 CI 系统组件,如 Jenkins 等一个组件。
  & Echo:是通知系统组件,发送邮件等信息。
  & Front50:是存储管理组件,需要配置 Redis、Cassandra 等组件使用。
  & Cloud driver 是它用来适配不同的云平台的组件,比如 Kubernetes,Google、AWS EC2、Microsoft Azure 等。
  & Fiat 是鉴权的组件,配置权限管理,支持 OAuth、SAML、LDAP、GitHub teams、Azure groups、 Google Groups 等。

二、部署

1、部署系统

    ubuntu   4 核 8G     系统版本:16.04 tls

2、安装docker

 选择合适的版本,k8s使用的版本为docker-ce_17.06.

下载docker:
   https://download.docker.com/linux/ubuntu/dists/xenial/pool/test/amd64/

安装docker:

# dpkg -i /data/docker-ce_17.06.2~ce-0~ubuntu-xenial_amd64.deb

配置dockerFQ:
配置自己的shadowsocks+privoxy,参考我的博客:https://www.cnblogs.com/cuishuai/p/8463458.html

# mkdir /etc/systemd/system/docker.service.d/
# cd /etc/systemd/system/docker.service.d/
# cat http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://10.10.23.4:8118" "NO_PROXY=localhost,127.0.0.1,0.0.0.0,10.10.29.3,10.10.25.29,172.11.0.0,172.10.0.0,172.11.0.0/16,172.10.0.0/16,10.,172.,10.10.23.4,10.96.0.0/12,10.244.0.0/16"

# systemctl daemon-reload
# systemctl restart docker

3、使用kubeadm安装k8s

为ubuntu系统换源,国内环境不FQ下载不了,所以需要换一个源。

# cat <<EOF > /etc/apt/sources.list.d/kubernetes.list
deb http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial main
EOF

# apt-get  update

# apt-get install  kubeadm  kubectl  kubelet  ipvsadm

默认安装的最新版本,我安装的是1.11.2.

可以提前下载需要的镜像:

k8s.gcr.io/kube-proxy-amd64:v1.11.2

k8s.gcr.io/kube-controller-manager-amd64:v1.11.2

k8s.gcr.io/kube-apiserver-amd64:v1.11.2

k8s.gcr.io/kube-scheduler-amd64:v1.11.2

k8s.gcr.io/coredns:1.1.3

k8s.gcr.io/etcd-amd64:3.2.18

k8s.gcr.io/pause:3.1

quay.io/coreos/flannel:v0.10.0-amd64

如果已经配置了FQ,可以直接执行下面的初始化步骤。

 

初始化k8s:

# kubeadm init --kubernetes-version v1.11.2 --token-ttl 0 \

--pod-network-cidr 10.244.0.0/16

按照提示完成初始化操作,然后设置master可以deploy。

# kubectl taint nodes --all node-role.kubernetes.io/master-

 

如上图所示则表示启动正常。

 

4、创建Account和NFS动态存储

首先要搭建一个NFS服务,具体搭建过程参考我的另外一篇博客:https://www.cnblogs.com/cuishuai/p/7798154.html

在现在的系统上安装客户端:

# apt install nfs-kernel-server

设置挂在点:

# mount -t nfs  10.10.29.4:/data/opv  /data/opv -o proto=tcp -o nolock

 ##10.10.29.4:/data/opv 的/data/opv是nfs服务的共享目录,  后面的/data/opv是本机的挂在点。

 

1)创建account用于helm部署服务


##创建tiller用户,用于helm安装授权
# cat rbac.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
   name: tiller
   namespace: default
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
   name: tiller
roleRef:
   apiGroup: rbac.authorization.k8s.io
   kind: ClusterRole
   name: cluster-admin
subjects:
   - kind: ServiceAccount
     name: tiller
     namespace: default

# kubectl  create -f  rbac.yaml


##创建default用户,用于spinnaker安装授权
# cat default-rbac.yaml
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
   name: default
roleRef:
   apiGroup: rbac.authorization.k8s.io
   kind: ClusterRole
   name: cluster-admin
subjects:
   - kind: ServiceAccount
     name: default
     namespace: default

# kubectl  create -f  default-rbac.yaml

2)创建NFS动态存储

!创建用户授权

# cat serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
   name: nfs-provisioner

# cat clusterrole.yaml
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
   name: nfs-provisioner-runner
rules:
   - apiGroups: [""]
      resources: ["persistentvolumes"]
      verbs: ["get", "list", "watch", "create", "delete"]
   - apiGroups: [""]
      resources: ["persistentvolumeclaims"]
      verbs: ["get", "list", "watch", "update"]
   - apiGroups: ["storage.k8s.io"]
      resources: ["storageclasses"]
      verbs: ["get", "list", "watch"]
   - apiGroups: [""]
      resources: ["events"]
      verbs: ["watch", "create", "update", "patch"]
   - apiGroups: [""]
      resources: ["services", "endpoints"]
      verbs: ["get"]
   - apiGroups: ["extensions"]
      resources: ["podsecuritypolicies"]
      resourceNames: ["nfs-provisioner"]
      verbs: ["use"]


# cat clusterrolebinding.yaml
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
   name: run-nfs-provisioner
subjects:
   - kind: ServiceAccount
     name: nfs-provisioner
     namespace: default
roleRef:
   kind: ClusterRole
   name: nfs-provisioner-runner
   apiGroup: rbac.authorization.k8s.io

# kubectl create -f serviceaccount.yaml -f clusterrole.yaml -f clusterrolebinding.yaml

!创建deployment

# cat deployment.yaml
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
   name: nfs-client-provisioner
spec:
   replicas: 1
   strategy:
   type: Recreate
   template:
      metadata:
         labels:
            app: nfs-client-provisioner
      spec:
         serviceAccount: nfs-provisioner
         containers:
            - name: nfs-client-provisioner
               image: registry.cn-hangzhou.aliyuncs.com/open-ali/nfs-client-provisioner
               volumeMounts:
                  - name: nfs-client-root
mountPath: /persistentvolumes
   env:
      - name: PROVISIONER_NAME
         value: fuseim.pri/ifs
      - name: NFS_SERVER
         value: 10.10.29.4
      - name: NFS_PATH
         value: /data/opv
   volumes:
      - name: nfs-client-root
         nfs:
            server: 10.10.29.4
            path: /data/opv

 

!创建storageclass

# cat storageclass.yaml
apiVersion: storage.k8s.io/v1beta1
kind: StorageClass
metadata:
   name: managed-nfs-storage
provisioner: fuseim.pri/ifs

# kubectl create -f deployment.yaml -f storageclass.yaml

5、安装helm

下载相应的二进制安装包

https://github.com/helm/helm/releases

解压加入到系统路径:

#  wget https://storage.googleapis.com/kubernetes-helm/helm-v2.10.0-linux-amd64.tar.gz

# tar xf helm-v2.10.0-linux-amd64.tar.gz

# cp helm  /usr/local/bin

初始化helm,安装tiller

# helm init --upgrade --service-account tiller --tiller-namespace default -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.10.0 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

官网下载最新的charts。不要用aliyun的,版本太低,会报错。

https://github.com/helm/charts/tree/master/stable/spinnaker

 

修改charts里的storageclass为上面自己定义的:managed-nfs-storage

root@skr:/data/spinnaker# ls charts/
jenkins minio redis

1)修改三个目录下的values.yaml文件,将storageclass/Storageclass名称修改为上面创建的managed-nfs-storage

2)修改spinnaker目录下的values.yaml文件,将minio的imageTAG修改成和charts/minio目录下的values.yaml文件一样的。

#vim  spinnaker/values.yaml

minio:
enabled: true
imageTag: RELEASE.2018-03-16T22-52-12Z

# vim spinnaker/charts/minio/values.yaml

image:
repository: minio/minio
tag: RELEASE.2018-03-16T22-52-12Z

 

 

定义自己的docker registry地址:
#vim spinnaker/values.yaml
accounts:
- name: dockerhub
   address: https://index.docker.io

address修改为自己的registry地址

3)修改spinnaker目录下的values.yaml文件,修改kubeConfig

kubectl create secret generic kubeconfig --from-file=/root/.kube/config

kubeConfig:
enabled: true
secretName: kubeconfig
secretKey: config
# List of contexts from the kubeconfig to make available to Spinnaker
contexts:
- kubernetes-admin@kubernetes

6、安装spinnaker:

在spinnaker目录下面执行:
# helm install -n spinnaker --tiller-namespace default ./ -f values.yaml --namespace default

  

  

  

如果部署出问题了,可以使用如下命令删掉本次部署:

# helm del --purge --tiller-namespace default spinnaker

 

7、访问

配置访问deck:
查看pod的服务端口:
# kubectl get pods spinnaker-spinnaker-deck-5d87d8d9f9-lswwv --template='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}'

映射端口到本地,127.0.0.1:port可以访问服务。当然可以部署一个ingress代理访问,这里只是测试环境。

# kubectl port-forward spinnaker-spinnaker-deck-5d87d8d9f9-lswwv 9000:9000

由于这样暴漏的服务监听的127.0.0.1,所以为了使用服务,需要自己搞一个服务代理。这里我就使用nginx:

##spinnaker-spinnaker-deck-5d87d8d9f9-lswwv  是我的deck的pod的名称,这里需要写自己的。


删除删不掉的pod:
# kubectl delete pod pod-name --grace-period 0 --force

 

 

转载于:https://www.cnblogs.com/cuishuai/p/9525656.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kubernetes (k8s) 是一种流行的容器编排平台,可以大大简化应用程序的部署和管理。CI/CD(持续集成/持续交付)管道是软件开发过程中的关键环节,可以将代码从开发到部署的流程自动化和加速。在 k8s 上部署 CI/CD 管道的步骤如下: 1. 创建代码仓库。您可以使用 Git 或其他版本控制工具。确保您的代码仓库可以与 CI/CD 工具集成。 2. 配置 CI 工具。这可以是 Jenkins、GitLab CI、CircleCI 等等。您需要将 CI 工具配置为从代码仓库拉取代码,并将其构建为容器镜像。确保您的 CI 工具可以与 Kubernetes 集群通信。 3. 配置 Docker Registry。您需要一个 Docker Registry 来存储构建的容器镜像,以便它们可以在 Kubernetes 集群中使用。您可以使用 Docker Hub、Google Container Registry、AWS ECR 等等。 4. 创建 Kubernetes 资源定义文件。这些文件告诉 Kubernetes 如何部署和管理您的应用程序。确保您的资源定义文件包含必要的配置和环境变量,以及指向您的 Docker Registry 的正确信息。 5. 部署应用程序。使用 kubectl 工具将 Kubernetes 资源定义文件应用于 Kubernetes 集群。 6. 配置 CD 工具。这可以是 Helm、Spinnaker、Argo CD 等等。您需要将 CD 工具配置为从 Docker Registry 拉取构建的容器镜像,并将其部署到 Kubernetes 集群。确保您的 CD 工具可以与 Kubernetes 集群通信。 7. 自动化部署。使用 CD 工具将新版本的应用程序自动部署到 Kubernetes 集群中。 总的来说,上述步骤是一个基本的 CI/CD 管道部署过程。当然,具体实现方式会因不同的应用程序和工具而异。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值