Tekton Pipeline의 on GKE Autopilot을 터치했습니다.

15494 단어 CICI/CDk8stektontech

개시하다


CI/CD 도구Tekton Pipeline가 있습니다.원래KNative Build로 개발됐던 k8s 로컬리스트의 CI다.

KNative는 구글이 발기한 OSS 프로젝트이자 구글클라우드런 등의 프로토타입 제품이었다.그래서인지 테크톤도 자꾸 닮았다Cloud Build.K8s가 있다면 시사회부터 구름, 지방 환경 등 어디서나 이동할 수 있고 규모가 간단해 보이는 것이 가장 큰 매력이다.
늘 숙련된 클라우드 빌드와 비슷하고 흥미가 있어서 먼저 GKE Autopilot로 환경을 구축했습니다.

GKE Autopilot 구축


환경 준비


그러면 Autopilot으로 GKE를 구축합니다.그나저나 수중에 있는 환경은 윈도11+WSL2+Ubuntu입니다.
우선 여기 설치Cloud SDK를 참고하세요.
다음으로kubectl을 설치합니다.
sudo apt-get install kubectl
현재 로컬 환경이 준비되어 있기 때문에 GCP에서 GKE 그룹을 만들 준비를 합니다.
gcloud services enable container.googleapis.com
gcloud services enable containerregistry.googleapis.com

클러스터 구축


집단명mycluster, 지역us-central1.마음에 드는 이름을 고르시면 됩니다.clusters create-autoautopilot입니다.노드는 구글의 관리 수업에 활용되기 때문에 팟 수 등에 따라 자동으로 최적화된다.
PROJECT_ID=$(gcloud config configurations list | grep True | awk '{print $4}')
CLUSTER=mycluster
REGION=us-central1

gcloud container clusters create-auto mycluster --create-subnetwork name=gke --region us-central1
gcloud container clusters get-credentials $CLUSTER --region $REGION --project $PROJECT_ID
gcloud auth configure-docker
어쨌든 나는 먼저 적당한 컨테이너를 개발할 것이다.
$ kubectl create deployment mycluster --image=hello-world
$ kubectl get pods -w
NAME                         READY   STATUS    RESTARTS   AGE
mycluster-64d6548b76-9m4b4   0/1     Pending   0          10s
$ $ kubectl get nodes
NAME                                       STATUS     ROLES    AGE    VERSION
gk3-mycluster-default-pool-293f6faa-ccqv   Ready      <none>   4m1s   v1.21.6-gke.1500
gk3-mycluster-default-pool-8c110b9e-fgpw   NotReady   <none>   3s     v1.21.6-gke.1500
gk3-mycluster-default-pool-8c110b9e-lqsw   Ready      <none>   4m1s   v1.21.6-gke.1500
노드가 어떻게 하는지 알지?Pod의 상태가 Completed로 변경되면 로그를 확인합니다.
$ kubectl logs pod/mycluster-64d6548b76-9m4b4

Hello from Docker!
This message shows that your installation appears to be working correctly.
~ 略
Hello World를 안전하게 출력합니다.이로써 GKE Autopilot의 빌드 및 기본 동작이 완료되었습니다.

Tekton 설치


Tekton에는 여러 제품이 있는데 이번에 주로 설치Tekton Pipeline와 관리 도구Tekton CLI, 웹 UITekton Dashboard를 설치했다.

Piperline 설치


먼저 다음을 참조하여 Pipeline을 설치합니다.
https://tekton.dev/docs/getting-started/
kubectl apply --filename https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml
Tekton Pipeline 설치는 여기서 마치겠습니다!간단하네.그렇긴 하지만 1분 정도는 오토파일럿이 노드를 늘리거나 줄이는데 시간이 걸리니 아래의 지령Running까지 기다리세요.
$ kubectl get pods --namespace tekton-pipelines --watch
NAME                                           READY   STATUS    RESTARTS   AGE
tekton-pipelines-controller-598cbbf84d-wnh7r   1/1     Running   0          4m5s
tekton-pipelines-webhook-7bcc5b9b69-9z5qf      1/1     Running   0          4m5s

Tekton CLI 설치


그런 다음 관리 명령 Tekton CLI를 설치합니다.참고Setup CLI.
WSL2+Ubuntu입니다. 그래서 appt-get으로 가져왔습니다.
sudo apt update;sudo apt install -y gnupg
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3EFE0E0A2F2F60AA
echo "deb http://ppa.launchpad.net/tektoncd/cli/ubuntu eoan main"|sudo tee /etc/apt/sources.list.d/tektoncd-ubuntu-cli.list
sudo apt update && sudo apt install -y tektoncd-cli
이렇게 하면 돼!이렇게 생각하면서 집행을 했는데 뭔가 잘못된 것 같아...
$ tkn version
tkn: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by tkn)
tkn: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found (required by tkn)
GLBC 버전이 잘못된 것 같습니다.내가 가지고 있는 환경 버전을 확인해 볼게.
$ ldd --version
ldd (Ubuntu GLIBC 2.31-0ubuntu9.2) 2.31
2.3.1 맞죠.WSL2에 기본적으로 설치된 Ubuntu는 20.4 버전이므로 적합하지 않을 수 있습니다.최신 Ubuntu 21.10으로 업그레이드할 수 있지만 번거로워서 다음과 같은 개발 환경용 Dookcerfile을 만들었습니다.
https://github.com/koduki/example-tekton/blob/main/env_dev/Dockerfile
이쪽을 구축하고 아래처럼 컨테이너 실행을 시작하면 됩니다.
$ docker run -it -v $HOME:/home/user -v /var/run/docker.sock:/var/run/docker.sock koduki/env-dev4tekton
user@5297fd802e46:~$ tkn version
Client version: 0.22.0
Pipeline version: v0.32.1
이렇게 하면 $HOME을 덮어 마운트하여 로컬 환경과 동시에 사용할 수 있습니다.또한 /var/run/docker.sock도 마운트되어 있어 Docker 명령과kubectl을 실행하고 호스트와 용기에서 공유할 수 있습니다.보안상 호스트에 영향을 미치기 때문에 추천하지 않지만 이번에는 호스트에 영향을 주고 싶어서 문제없습니다.이 방법은 개발 환경 전체를 포장할 수 있어 매우 편리하기 때문에 추천합니다.

Tekton Dashboard 설치


관리 도구는 Tekton CLI만으로도 충분하지만 웹 UI를 원하십니까?바로 Tekton Dashboard입니다.
도입은 K8s에서만 디자인할 수 있기 때문에 간단합니다.
https://tekton.dev/docs/dashboard/
kubectl apply --filename https://github.com/tektoncd/dashboard/releases/latest/download/tekton-dashboard-release.yaml
이렇게 하면 됩니다.그리고 Pod의 상태를 관찰하고 depro의 완성을 기다립니다.
$ kubectl get pods --namespace tekton-pipelines --watch
NAME                                           READY   STATUS    RESTARTS   AGE
tekton-pipelines-controller-598cbbf84d-wnh7r   1/1     Running   0          7h4m
tekton-pipelines-webhook-7bcc5b9b69-9z5qf      1/1     Running   0          7h4m
tekton-dashboard-757d97b48d-8xxzc              0/1     Pending   0          0s
tekton-dashboard-757d97b48d-8xxzc              0/1     Pending   0          0s
일어서kube-proxy로 그룹 IP에 접근합니다.이것은 방금 제작한 개발 환경용 용기가 아니라 WSL2에서 직접 수행한다.
$ alias open="/mnt/c/Progra~2/Microsoft/Edge/Application/msedge.exe"
$ kubectl proxy --port=8080
$ open http://localhost:8080/api/v1/namespaces/tekton-pipelines/services/tekton-dashboard:http/proxy/

웹 UI 떴죠?이렇게 준비하면 완성된다.

Tekton으로 구축


Hello World


먼저 베껴쓰기자습서를 한 다음 Tekton을 실행합니다.task-hello.yaml는 다음과 같이 제작하고 응용한다.
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: echo-hello-world
spec:
  steps:
    - name: echo
      image: ubuntu
      command:
        - echo
      args:
        - "Hello World"
$ kubectl apply -f task-hello.yaml
task.tekton.dev/echo-hello-world created
tekton-cli로Task의 사과 결과를 볼게요.
$ tkn task describe echo-hello-world
Name:        echo-hello-world
Namespace:   default
🦶 Steps
 ∙ echo
Task는 echo-hello-world라는 이름으로 등록되어 Stepecho로 등록되었습니다.YAML을 보면 알 수 있듯이 echo-step에서 매개 변수를 Hello World로 설정해서 echo를 실행합니다.이 Task 제작은 Jenkins 같은 표현으로'숙제의 제작'이다.계속 실행하세요.
다음과 같이 YAML을 애플 작업에 쓰십시오.
apiVersion: tekton.dev/v1beta1
kind: TaskRun
metadata:
  name: echo-hello-world-task-run
spec:
  taskRef:
    name: echo-hello-world
$ kubectl apply -f taskrun-hello.yaml
taskrun.tekton.dev/echo-hello-world-task-run created
taskRef에서 echo-hello-world를 지정하고 실행할 작업을 지정합니다.tekton-cli의 결과를 봅시다.
$ tkn task describe echo-hello-world
Name:        echo-hello-world
Namespace:   default
🦶 Steps
 ∙ echo
🗂   Taskruns
NAME                        STARTED          DURATION   STATUS
echo-hello-world-task-run   35 minutes ago   1 minute   Succeeded
실행 결과는 다음과 같은 Pod 로그를 통해 확인할 수 있습니다.
$ tkn taskrun logs echo-hello-world-task-run3
[echo] Hello World
계기판도 다음과 같이 확인할 수 있다.

총결산


어쨌든 이렇게 하면 환경을 구축할 수 있다.앞으로 나는 아래의 항목을 총결하고 싶다.
  • Giithub의 협업과 Docker 등록표에 대한 등록
  • Java를 구축하고 Maven 창고에 등록
  • 건축물의 비율
  • Circle CI와 Github Action도 좋은 예가 많지만, Jenkins 이외에 SaaS가 아닌 옵션도 준비하고 싶어 앞으로 더 놀고 싶다.살짝 건드린 느낌은 Argo보다 자신에게 더 잘 어울려요.
    그럼 해피해킹!

    좋은 웹페이지 즐겨찾기