kakao Cloud school 2기 D+48

LEE EUI JOO·2023년 1월 17일
0

K8S

목록 보기
8/17

1. Jenkins Pipeline 구축

대시보드 - 새로운 Item - Item name - Pipeline choose


간단한 테스트용 Pipeline Script 작성

pipeline {
    agent any 
    stages {
        stage('Build') { 
            steps {
            sh ''' # <'''명령어'''>
            echo build
            '''
            }
        }
        stage('Test') { 
            steps {
            sh '''
            echo test
            '''    
            }
        }
        stage('Deploy') { 
            steps {
            sh '''
            echo deploy
            '''    
            }
        }
    }
}

성공했던 빌드 불러와 구성할 수 있다.


이전에 생성했던 Build Steps 를 불러와 간단한 파이프라인을 생성해 볼 것임

파이프라인을 구성하는 파일은 jenkinsfile로 칭하고 쉘에서 생성하고 수정한 jenkinsfile 을 Git Hub에 푸쉬한다.


root@master:~/jen# cat jenkinsfile 
pipeline {
  agent any
  stages {
    stage('git scm update') {
      steps {
        git url: 'https://github.com/Leeeuijooo/jen.git', branch: 'main'
      }
    }
    stage('docker build') {
      steps {
        sh '''
        sudo docker build -t rapa.iptime.org:5000/mynginx:joo .
        sudo docker push rapa.iptime.org:5000/mynginx:joo
        '''
      }
    }
    
    stage('deploy k8s') {
      steps {
        sh '''
        sudo kubectl apply -f pod.yml
        '''
      }
    }
    
  }
}

root@master:~/jen# git init
Reinitialized existing Git repository in /root/jen/.git/'

root@master:~/jen# git add .

root@master:~/jen# git commit -m "add Jenkinsfile"
[main 124537a] add Jenkinsfile
 1 file changed, 27 insertions(+)
 create mode 100644 jenkinsfile

<jenkinsfile Push>

root@master:~/jen# git push -u origin main
Username for 'https://github.com': Leeeuijooo
Password for 'https://Leeeuijooo@github.com': 
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 4 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 558 bytes | 558.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/Leeeuijooo/jen
   023ccc4..124537a  main -> main
Branch 'main' set up to track remote branch 'main' from 'origin'.

root@master:~/jen# kubectl get pod
NAME       READY   STATUS    RESTARTS   AGE
pod-test   1/1     Running   0          54s

root@master:~/jen# kubectl get svc
NAME               TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes         ClusterIP   10.96.0.1       <none>        443/TCP        23h
pod-test-service   NodePort    10.109.51.126   <none>        80:30001/TCP   70s

root@master:~/jen# curl localhost:30001
Hello World!
Hello Long jung perfect!!


2. Argo CD - Kubernetes CD Tool


<네임스페이스 설정>

root@master:~/jen# kubectl create namespace argocd
namespace/argocd created

<설치>

root@master:~/jen# kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

<외부 접속을 위해 type을 로드밸런서로 변경>
root@master:~/jen# kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'
service/argocd-server patched

<argo cli 설치>
root@master:~/jen# sudo curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64

<실행 권한 변경>
root@master:~/jen# sudo chmod +x /usr/local/bin/argocd

<초기 패스워드 echo>
root@master:~/jen# kubectl  get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" -n argocd | base64 -d; echo

<서비스 확인(외부주소)>
root@master:~/jen# kubectl get svc -n argocd argocd-server
NAME            TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)                      AGE
argocd-server   LoadBalancer   10.108.93.85   <pending>     80:32445/TCP,443:32040/TCP   10m

# metallb 설치가 되어야 EXTERNAL IP 가 정상적으로 할당될것임.
# 오류 문제 - 로드밸런서로 접속하지 않고 Nodeport로 접속

<외부주소를 못받아오면 노드포트로 할 것>
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "NodePort"}}'

계정 ID - admin PW - 방금 받았던 초기 PWD

Settings - repositories - CONNECT REPO

깃허브 레포지토리에 등록할 것

Application - New application

Prun resources - yml 파일 까지 삭제하겠다
self heal - 문제가 생겼을 시 자동으로 pod 혹은 서비스를 띄운다

<path는 현재 디렉토리>

history & rollback - 시각화 + 롤백 (이전의 상태) 가능

Pod 를 지워보고 image를 변경해보기 <수정필요>

root@master:~/jen# kubectl delete pod pod-test
pod "pod-test" deleted
profile
무럭무럭 자라볼까

0개의 댓글