온프레 GitLab에 MicroK8s 연결하여 GitLab Auto DevOps 체험 (전반)
12693 단어 autodevopsmicrok8skubernetesGitLab
본 기사는 개인적인 견해이며, 필자가 소속하는 어떠한 단체에도 관계가 없습니다.
0. 소개
GitLab에는 Kubernetes를 연계하여 편리하게 여러가지 기능이 붙어 있습니다.
Kubernetes clusters | GitLab
htps : // / cs. 기 t b. 코 m / 네 / 우세 r / p 로지 ct / c ㎅ s rs /
그러나 문제가 있습니다. GKE로 해도 EKS로 해도 나름대로 좋은 가격입니다.
앱을 조금 배포하는 환경은 비쌉니다.
그러나 본격적으로 Kubernetes를 세우는 것도 힘들고. . . .
그래서 가상 머신에 MicroK8s를 움직여 온프레 GitLab에 연동해 보겠습니다.
길어졌기 때문에 전반과 후반으로 나누었습니다. 후반은 이쪽입니다.
후반: 온프레 GitLab에 MicroK8s 연결하여 GitLab Auto DevOps 체험 (후반) - Qiita
1. VMware에서 가상 머신 시작
medium의 인스턴스를 적당히 하나 움직입니다.
리소스는 CPU:4vCPU, Mem:4GB입니다.
OS는 우분투 18.04 LTS로 만들었습니다.
2. MicroK8s를 달린다
2-1. MicroK8s 설치
sudo update && sudo upgrade -y && sudo reboot
sudo install snap && sudo snap install microk8s --classic
sudo usermod -a -G microk8s <ユーザー名>
2-2. MicroK8s의 기동 상태를 확인한다
$ microk8s.status
microk8s is running
high-availability: no
datastore master nodes: 127.0.0.1:19001
datastore standby nodes: none
addons:
enabled:
ha-cluster # Configure high availability on the current node
disabled:
ambassador # Ambassador API Gateway and Ingress
cilium # SDN, fast with full network policy
dashboard # The Kubernetes dashboard
dns # CoreDNS
fluentd # Elasticsearch-Fluentd-Kibana logging and monitoring
gpu # Automatic enablement of Nvidia CUDA
helm # Helm 2 - the package manager for Kubernetes
helm3 # Helm 3 - Kubernetes package manager
host-access # Allow Pods connecting to Host services smoothly
ingress # Ingress controller for external access
istio # Core Istio service mesh services
jaeger # Kubernetes Jaeger operator with its simple config
keda # Kubernetes-based Event Driven Autoscaling
knative # The Knative framework on Kubernetes.
kubeflow # Kubeflow for easy ML deployments
linkerd # Linkerd is a service mesh for Kubernetes and other frameworks
rbac # Role-Based Access Control for authorisation
storage # Storage class; allocates storage from host directory
metallb # Loadbalancer for your Kubernetes cluster
metrics-server # K8s Metrics Server for API access to service metrics
multus # Multus CNI enables attaching multiple network interfaces to pods
portainer # Portainer UI for your Kubernetes cluster
prometheus # Prometheus operator for monitoring and logging
registry # Private image registry exposed on localhost:32000
traefik # traefik Ingress controller for external access
kubectl에서 노드를 검색할 수 있는지 확인
$ microk8s.kubectl get nodes
NAME STATUS ROLES AGE VERSION
ip-10-x-y-z Ready <none> 48m v1.17.0
2-3. microk8s의 addon를 달린다
필요한 Addon은 다음과 같습니다.
GitLab측에서 ingress등은 넣기 때문에 Addon은 최저한으로 합시다.
Dashboard 등은 문제 없다고 생각합니다.
1. VMware에서 가상 머신 시작
medium의 인스턴스를 적당히 하나 움직입니다.
리소스는 CPU:4vCPU, Mem:4GB입니다.
OS는 우분투 18.04 LTS로 만들었습니다.
2. MicroK8s를 달린다
2-1. MicroK8s 설치
sudo update && sudo upgrade -y && sudo reboot
sudo install snap && sudo snap install microk8s --classic
sudo usermod -a -G microk8s <ユーザー名>
2-2. MicroK8s의 기동 상태를 확인한다
$ microk8s.status
microk8s is running
high-availability: no
datastore master nodes: 127.0.0.1:19001
datastore standby nodes: none
addons:
enabled:
ha-cluster # Configure high availability on the current node
disabled:
ambassador # Ambassador API Gateway and Ingress
cilium # SDN, fast with full network policy
dashboard # The Kubernetes dashboard
dns # CoreDNS
fluentd # Elasticsearch-Fluentd-Kibana logging and monitoring
gpu # Automatic enablement of Nvidia CUDA
helm # Helm 2 - the package manager for Kubernetes
helm3 # Helm 3 - Kubernetes package manager
host-access # Allow Pods connecting to Host services smoothly
ingress # Ingress controller for external access
istio # Core Istio service mesh services
jaeger # Kubernetes Jaeger operator with its simple config
keda # Kubernetes-based Event Driven Autoscaling
knative # The Knative framework on Kubernetes.
kubeflow # Kubeflow for easy ML deployments
linkerd # Linkerd is a service mesh for Kubernetes and other frameworks
rbac # Role-Based Access Control for authorisation
storage # Storage class; allocates storage from host directory
metallb # Loadbalancer for your Kubernetes cluster
metrics-server # K8s Metrics Server for API access to service metrics
multus # Multus CNI enables attaching multiple network interfaces to pods
portainer # Portainer UI for your Kubernetes cluster
prometheus # Prometheus operator for monitoring and logging
registry # Private image registry exposed on localhost:32000
traefik # traefik Ingress controller for external access
kubectl에서 노드를 검색할 수 있는지 확인
$ microk8s.kubectl get nodes
NAME STATUS ROLES AGE VERSION
ip-10-x-y-z Ready <none> 48m v1.17.0
2-3. microk8s의 addon를 달린다
필요한 Addon은 다음과 같습니다.
GitLab측에서 ingress등은 넣기 때문에 Addon은 최저한으로 합시다.
Dashboard 등은 문제 없다고 생각합니다.
2-1. MicroK8s 설치
sudo update && sudo upgrade -y && sudo reboot
sudo install snap && sudo snap install microk8s --classic
sudo usermod -a -G microk8s <ユーザー名>
2-2. MicroK8s의 기동 상태를 확인한다
$ microk8s.status
microk8s is running
high-availability: no
datastore master nodes: 127.0.0.1:19001
datastore standby nodes: none
addons:
enabled:
ha-cluster # Configure high availability on the current node
disabled:
ambassador # Ambassador API Gateway and Ingress
cilium # SDN, fast with full network policy
dashboard # The Kubernetes dashboard
dns # CoreDNS
fluentd # Elasticsearch-Fluentd-Kibana logging and monitoring
gpu # Automatic enablement of Nvidia CUDA
helm # Helm 2 - the package manager for Kubernetes
helm3 # Helm 3 - Kubernetes package manager
host-access # Allow Pods connecting to Host services smoothly
ingress # Ingress controller for external access
istio # Core Istio service mesh services
jaeger # Kubernetes Jaeger operator with its simple config
keda # Kubernetes-based Event Driven Autoscaling
knative # The Knative framework on Kubernetes.
kubeflow # Kubeflow for easy ML deployments
linkerd # Linkerd is a service mesh for Kubernetes and other frameworks
rbac # Role-Based Access Control for authorisation
storage # Storage class; allocates storage from host directory
metallb # Loadbalancer for your Kubernetes cluster
metrics-server # K8s Metrics Server for API access to service metrics
multus # Multus CNI enables attaching multiple network interfaces to pods
portainer # Portainer UI for your Kubernetes cluster
prometheus # Prometheus operator for monitoring and logging
registry # Private image registry exposed on localhost:32000
traefik # traefik Ingress controller for external access
kubectl에서 노드를 검색할 수 있는지 확인
$ microk8s.kubectl get nodes
NAME STATUS ROLES AGE VERSION
ip-10-x-y-z Ready <none> 48m v1.17.0
2-3. microk8s의 addon를 달린다
필요한 Addon은 다음과 같습니다.
GitLab측에서 ingress등은 넣기 때문에 Addon은 최저한으로 합시다.
Dashboard 등은 문제 없다고 생각합니다.
2-3-1. rbac,dns,storage 사용
rbac, dns는 기본적으로 필요합니다.
storage는 pv가 필요한 응용 프로그램에 필요합니다.
$ sudo microk8s.enable rbac
$ sudo microk8s.enable dns storage
2-3-2. metallb
metallb는 ingress가 사용하는 LoadBalancer에 필요합니다.
enable시에 사용할 수 있는 IP 주소를
a.b.c.d-a.b.c.e
의 형식으로 지정해 주세요.$ sudo microk8s.enable metallb
Enabling MetalLB
Enter each IP address range delimited by comma (e.g. '10.64.140.43-10.64.140.49,192.168.0.105-192.168.0.111'): 192.168.10.20-192.168.10.30
Applying Metallb manifest
namespace/metallb-system created
secret/memberlist created
podsecuritypolicy.policy/controller created
podsecuritypolicy.policy/speaker created
serviceaccount/controller created
serviceaccount/speaker created
clusterrole.rbac.authorization.k8s.io/metallb-system:controller created
clusterrole.rbac.authorization.k8s.io/metallb-system:speaker created
role.rbac.authorization.k8s.io/config-watcher created
role.rbac.authorization.k8s.io/pod-lister created
clusterrolebinding.rbac.authorization.k8s.io/metallb-system:controller created
clusterrolebinding.rbac.authorization.k8s.io/metallb-system:speaker created
rolebinding.rbac.authorization.k8s.io/config-watcher created
rolebinding.rbac.authorization.k8s.io/pod-lister created
daemonset.apps/speaker created
deployment.apps/controller created
configmap/config created
MetalLB is enabled
2-3-3. 애드온이 활성화되었는지 확인
$ microk8s.status
microk8s is running
high-availability: no
datastore master nodes: 127.0.0.1:19001
datastore standby nodes: none
addons:
enabled:
dns # CoreDNS
ha-cluster # Configure high availability on the current node
metallb # Loadbalancer for your Kubernetes cluster
rbac # Role-Based Access Control for authorisation
storage # Storage class; allocates storage from host directory
<以下略>
2-5. (선택 사항) coredns 다시 쓰기
사내 온프레 GitLab의 IP 주소를 사내 DNS측으로부터 취득하고 싶었으므로, DNS 서버의 참조처를 변경했습니다.
$ kubectl edit configmaps coredns -n kube-system -o yaml
너무 깨끗한 방법은 아니지만 직접 다시 작성했습니다.
data:
Corefile: ".:53 {\n errors\n health {\n lameduck 5s\n }\n ready\n
\ log . {\n class error\n }\n kubernetes cluster.local in-addr.arpa
ip6.arpa {\n pods insecure\n fallthrough in-addr.arpa ip6.arpa\n }\n
\ prometheus :9153\n forward . <社内DNSサーバー> \n cache 30\n loop\n reload\n
\ loadbalance\n}\n"
다음과 같이 DNS를 그릴 수 있는지 확인합시다.
$ kubectl run busybox --restart=Never --image=busybox:1.28 -- sleep 3600
$ kubectl exec busybox -- nslookup <オンプレGitLab FQDN>
2-6. (선택 사항) 외부에서 kubectl로 연결할 수 있도록 config 가져 오기
(GitLab에서 연결하는 데 필수는 아닙니다)
kubeconfig를 가져옵니다.
$ microk8s.config | tee gitlab-microk8s.config
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: LS0tLS1CRUdJxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
server: https://10.x.y.z:16443
name: microk8s-cluster
contexts:
- context:
cluster: microk8s-cluster
user: admin
name: microk8s
current-context: microk8s
kind: Config
preferences: {}
users:
- name: admin
user:
username: admin
password: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
3. GitLab과 협력하는 데 필요한 정보를 얻습니다.
GitLab과 협력하려면 다음 정보가 필요합니다.
1. API URL
2. CA 인증서
3. 서비스 토큰
각각 취득해 둡니다.
3-1. API URL
2-6에서 얻은 kubeconfig server: https://10.x.y.z:16443
https://10.x.y.z:16443
부분입니다
3-2. CA 인증서
kubectl get secrets
에서 나온 default-token에서 인증서를 가져옵니다.
$ kubectl get secrets
NAME TYPE DATA AGE
default-token-78r9t kubernetes.io/service-account-token 3 46h
default-token-78r9t
로부터 증명서를 취득합니다.
$ kubectl get secret default-token-78r9t -o jsonpath="{['data']['ca\.crt']}" | base64 --decode
-----BEGIN CERTIFICATE-----
MIIDATCCAemgAwIBAgIJANFqxpnmuSSZMA0GCSqGSIb3DQEBCwUAMBcxFTATBgNV
<中略>
-----END CERTIFICATE-----
3-3. 서비스 토큰
서비스 토큰을 얻으려면 먼저 다음과 같은 매니페스트에서 서비스 계정 gitlab을 만듭니다.
gitlab-admin-service-account.yamlapiVersion: v1
kind: ServiceAccount
metadata:
name: gitlab
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: gitlab-admin
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: gitlab
namespace: kube-system
만든 파일을 kubectl apply합니다.
$ kubectl apply -f gitlab-admin-service-account.yaml
서비스 계정이 생겼으므로 토큰을 받습니다.
마지막 token:
이후의 문자열 (아래의 예에서는 eyJhbGciOiから最後
까지)을 어딘가에 보존해 둡니다.
$ kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep gitlab | awk '{print$1}')
Name: gitlab-token-dqjlx
Namespace: kube-system
Labels: <none>
Annotations: kubernetes.io/service-account.name: gitlab
kubernetes.io/service-account.uid: 7e73e750-4bfc-4718-9ee0-ebe83da58c36
Type: kubernetes.io/service-account-token
Data
====
ca.crt: 1103 bytes
namespace: 11 bytes
token: eyJhbGciOiJSUzI1NiIsImtpZCI6IjVURFF<以下略>
후반에 계속
후반: 온프레 GitLab에 MicroK8s 연결하여 GitLab Auto DevOps 체험 (후반) - Qiita
Reference
이 문제에 관하여(온프레 GitLab에 MicroK8s 연결하여 GitLab Auto DevOps 체험 (전반)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ynott/items/f3651e9f3d46b1f088ee
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ kubectl get secrets
NAME TYPE DATA AGE
default-token-78r9t kubernetes.io/service-account-token 3 46h
$ kubectl get secret default-token-78r9t -o jsonpath="{['data']['ca\.crt']}" | base64 --decode
-----BEGIN CERTIFICATE-----
MIIDATCCAemgAwIBAgIJANFqxpnmuSSZMA0GCSqGSIb3DQEBCwUAMBcxFTATBgNV
<中略>
-----END CERTIFICATE-----
apiVersion: v1
kind: ServiceAccount
metadata:
name: gitlab
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: gitlab-admin
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: gitlab
namespace: kube-system
$ kubectl apply -f gitlab-admin-service-account.yaml
$ kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep gitlab | awk '{print$1}')
Name: gitlab-token-dqjlx
Namespace: kube-system
Labels: <none>
Annotations: kubernetes.io/service-account.name: gitlab
kubernetes.io/service-account.uid: 7e73e750-4bfc-4718-9ee0-ebe83da58c36
Type: kubernetes.io/service-account-token
Data
====
ca.crt: 1103 bytes
namespace: 11 bytes
token: eyJhbGciOiJSUzI1NiIsImtpZCI6IjVURFF<以下略>
Reference
이 문제에 관하여(온프레 GitLab에 MicroK8s 연결하여 GitLab Auto DevOps 체험 (전반)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ynott/items/f3651e9f3d46b1f088ee텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)