diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..2a267cf Binary files /dev/null and b/.DS_Store differ diff --git a/README.md b/README.md index 2e4ac4a..62a97ed 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # 본 과정에 대해 ( Cloud Native 입문 과정 ) -본 교육 과정은 Cloud Native 입문 과정으로 이론 및 실습을 수행한다. +본 교육 과정은 Cloud Native 입문 과정으로 이론 및 실습을 수행한다. ( 2일 오프라인 교육 ) 문의 : 이석환 ( seokhwan.lee@kt.com / shclub@gmail.com ) @@ -27,7 +27,7 @@ - k8s hands-on Basic [ Hands-On 문서보기 ](./k8s_basic_hands_on.md) - 실습 전체 개요 - - kubeconfig 설정 : kubectl 설치 + - kubeconfig 설정 : oc / kubectl 설치 - kubectl 활용 - kubernetes 리소스 ( Pod , Service , Deployment 생성 및 삭제) - 배포 ( Rolling Update / Rollback ) @@ -35,10 +35,19 @@
-4. Chapter 4 : 2시간 ( [가이드 문서보기](./chapter4.md) ) + +4. Chapter 4 : 10분 ( [가이드 문서보기]( https://github.com/shclub/edu/blob/master/chapter9.md ) ) + + - OKD 4.7 설치 ( kt cloud FlyingCube 2.0 ) + - NFS 설정 및 접속 + - ArgoCD 설치 및 설정 ( OKD ) + - elastic APM 설치 및 설정 ( OKD ) + +
+ +5. Chapter 5 : 2시간 ( [가이드 문서보기](./chapter4.md) ) - GitOps 설명 - - ArgoCD 설치 및 설정 - kustomize 설명 및 실습 - k8s에 배포 실습 ( Blue/Green , Canary ) - ArgoCD Hands-on [ Hands-On 문서보기 ](./argocd_hands_on.md) @@ -52,48 +61,73 @@
+6. Chapter 5 : 1시간 ( [가이드 문서보기](https://github.com/shclub/edu/blob/master/k8s_middle_hands_on.md) ) + + - Storage Volume ( PV/PVC , DB 설치 + NFS ) + - MariaDB NFS 에 설치 ( /w Helm Chart ) + - NFS 라이브러리 설치 ( Native Kubernetes ) + - Service - Headless, Endpoint, ExternalName + - EFK APM Agent 설정 ( React / SpringBoot ) + - Helm Chart 개념 및 설명 + - React/SpringBoot/MariaDB 3-tier 구조 한번에 배포 하기 + - Helm Umbrella 패턴 ( /w SubChart ) + - ArgoCD Apps-of-Apps 패턴 + - Elastic APM 활용한 로그 확인 + +
+
## Jenkins 접속 정보
-```bash -http://211.252.85.148:9000/ -``` +웹브라우저에서 접속 가능. -
+http://211.252.85.148:9000/ -## OKD 접속 정보 - -
-```bash -oc login https://api.211-34-231-81.nip.io:6443 -u shclub-admin -p New1234! --insecure-skip-tls-verify -``` +- 계정 : ( 예: edu1 ) +- 비밀번호 : 사전 공지 +
-## Node Port용 접속 정보 +--- + +## OKD 접속 정보
```bash -211.34.231.84 +oc login https://api.211-34-231-81.nip.io:6443 -u shclub-admin -p <비밀번호> --insecure-skip-tls-verify ``` +- 계정 : ( 예: edu1-admin ) +- 비밀번호 : 사전 공지 + +
+ +--- ## ArgoCD 접속 정보
-```bash -https://211.252.87.34:30000/ -``` + +OKD : https://argocd-argocd.apps.211-34-231-82.nip.io/applications + + +K3S : https://211.252.87.34:30000/ ( 임시 ) + +- 계정 : edu + 순번 ( 예: edu1 ) +- 비밀번호 : 사전 공지
+--- + ## KT Cloud KTP 상품
@@ -104,11 +138,12 @@ https://cloud.kt.com/portal/user-guide/Container-container-guide
-## NGINX YAML +--- + +## NGINX YAML Sample
- nginx.yaml ```bash apiVersion: apps/v1 diff --git a/argocd_hands_on.md b/argocd_hands_on.md index 3593545..0185149 100644 --- a/argocd_hands_on.md +++ b/argocd_hands_on.md @@ -664,7 +664,7 @@ ArgoCD 화면에 admin 계정으로 생성한 pipeline 을 볼수 있습니다. apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: - name: edu-project + name: edu1 namespace: argocd spec: clusterResourceWhitelist: @@ -687,13 +687,13 @@ spec: root@jakelee:~# kubectl apply -f argocd_proj.yaml ``` -에러가 없이 발생하면 edu-project 라는 이름으로 project 가 생성된 것을 확인 할 수 있다. +에러가 없이 발생하면 edu1 이라는 이름으로 project 가 생성된 것을 확인 할 수 있다. ```bash root@jakelee:~# kubectl get appproject -n argocd NAME AGE default 53d -edu-project 88m +edu1 88m ```
@@ -714,15 +714,15 @@ edu-project 88m 권한을 세부 적으로 컨트롤 한다. -edu1 이라는 신규 생성은 edu-project라고 하는 project에 한하여만 전체 권한을 갖는다. +edu1 project는 edu1라고 유저에 한하여만 전체 권한을 갖는다. -edu-project 이외의 applications 들은 볼수 없습니다. +edu1 이외의 applications 들은 볼수 없습니다. ```bash p, role:edu1, clusters, get, *, allow p, role:edu1, repositories, get, *, allow p, role:edu1, projects, get, *, allow - p, role:edu1, applications, *, edu-project/*, allow + p, role:edu1, applications, *, edu1/*, allow ```
@@ -731,7 +731,7 @@ edu-project 이외의 applications 들은 볼수 없습니다. ```bash - p, role:edu1, projects, get, edu-project, allow + p, role:edu1, projects, get, edu1, allow ```
@@ -749,7 +749,7 @@ data: p, role:edu1, clusters, get, *, allow p, role:edu1, repositories, get, *, allow p, role:edu1, projects, get, *, allow - p, role:edu1, applications, *, edu-project/*, allow + p, role:edu1, applications, *, edu1/*, allow g, edu1, role:edu1 g, shclub, role:manager policy.default: role:'' @@ -757,6 +757,43 @@ data:
+Argocd 화면에서 project를 생성하는 방법은 아래와 같다. + + +Argocd 화면의 왼쪽 프레임에 톱니 바퀴 아이콘인 관리 메뉴를 클릭하고 project로 진입합니다. + + + +
+ +default 라는 project 는 argocd에서 기본적으로 제공하는 project 이름 이다. + + + +
+ +New Project 아이콘을 클릭하여 신규로 project를 생성한다. + + + +
+ +project 생성 이 후에 sources repository 와 destinations 의 Edit 메뉴를 클릭하여 `*` 를 기본으로 설정하면 모든 repository와 destination에 대한 권한이 할당 된다. + + + +
+ +CLUSTER RESOURCE ALLOW LIST 도 edit 하여 설정 한다. + + + +
+ +Project 생성 완료 하고 나면 Deploy Application 생성 할때 Project 콤보 박스를 클릭하여 해당 project를 선택 할 수 있다. + +
+ ### kustomize
diff --git a/assets/argocd_new_project0.png b/assets/argocd_new_project0.png new file mode 100644 index 0000000..354a35b Binary files /dev/null and b/assets/argocd_new_project0.png differ diff --git a/assets/argocd_new_project1.png b/assets/argocd_new_project1.png new file mode 100644 index 0000000..baf4737 Binary files /dev/null and b/assets/argocd_new_project1.png differ diff --git a/assets/argocd_new_project2.png b/assets/argocd_new_project2.png new file mode 100644 index 0000000..5872040 Binary files /dev/null and b/assets/argocd_new_project2.png differ diff --git a/assets/argocd_new_project3.png b/assets/argocd_new_project3.png new file mode 100644 index 0000000..a116800 Binary files /dev/null and b/assets/argocd_new_project3.png differ diff --git a/assets/argocd_new_project4.png b/assets/argocd_new_project4.png new file mode 100644 index 0000000..9d0be36 Binary files /dev/null and b/assets/argocd_new_project4.png differ diff --git a/assets/container_portal.png b/assets/container_portal.png deleted file mode 100644 index 22ed4b7..0000000 Binary files a/assets/container_portal.png and /dev/null differ diff --git a/assets/container_portal1.png b/assets/container_portal1.png deleted file mode 100644 index d729210..0000000 Binary files a/assets/container_portal1.png and /dev/null differ diff --git a/chapter1.md b/chapter1.md index 631d350..035d121 100644 --- a/chapter1.md +++ b/chapter1.md @@ -10,7 +10,7 @@ Docker에 대해서 자세한 설명과 함께 Jenkins CI 구성 요소인 Git 3. Jenkins를 사용한 CI 구성 하기 -## Docker +## 1. Docker
@@ -88,6 +88,223 @@ Private 형태로는 Gitlab을 많이 사용 함.
+### Cloud Shell 용 VM 서버 접속 + +
+ +사전에 공유 한 VM 서버 ( OS : Ubuntu , CPU : 2core , MEM : 2G )에 접속합니다. + +터미널에서 아래 명령어를 입력하여 로그인 한다. + +로그인 후 connecting 저장 질문이 나오면 yes 를 입력한다. + +```bash +ssh root@(본인 Public ip) +``` + +
+ +### Docker 설치 + +
+ +#### 패키지 인덱스 업데이트 + +
+ +```bash +apt-get update +``` +
+ +#### HTTPS를 통해 repository 를 이용하기 위해 package 들을 설치 + +
+ +```bash +apt-get -y install apt-transport-https ca-certificates curl gnupg lsb-release +``` +
+ +#### Docker의 Official GPG Key 를 등록합니다. + +
+ +```bash +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg +``` + +
+ +#### stable repository를 등록합니다. + +
+ +```bash +echo \ +"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ +$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null +``` +
+ +#### Install + +
+ +```bash +apt-get update && apt-get install docker-ce docker-ce-cli containerd.io gnupg2 pass +``` + + +* Ubuntu 에서 도커 로그인 버그가 있어 아래 처럼 에러가 발생하기 때문에 gnupg2 pass 라이브러리를 추가 했음. + +```bash +$ docker login -u shclub -p ******** https://index.docker.io/v1/ +WARNING! Using --password via the CLI is insecure. Use --password-stdin. +Error saving credentials: error storing credentials - err: exit status 1, out: `Cannot autolaunch D-Bus without X11 $DISPLAY` +``` + +
+ +#### 도커 버전을 확인합니다. + +
+ +```bash +docker --version +``` + + +
+ +#### 도커 이미지 다운로드 및 실행하기 + +
+ +```bash +docker run hello-world +``` + + + + +
+ +### Docker compose 설치. + +
+ +VM 에서 docker compose를 설치 합니다. + +```bash +apt-get update && apt-get install docker-compose +``` + +
+ +### openshift console 설치 + +
+ +VM 에서 아래와 같이 openshift client를 설치 합니다. + +```bash +root@edu2:~# wget https://github.com/openshift/okd/releases/download/4.7.0-0.okd-2021-09-19-013247/openshift-client-linux-4.7.0-0.okd-2021-09-19-013247.tar.gz +``` + +
+ +tar 화일을 압축을 풉니다. + +```bash +root@edu2:~# ls +cloud-init-setting.sh openshift-client-linux-4.7.0-0.okd-2021-09-19-013247.tar.gz +root@edu2:~# tar xvfz openshift-client-linux-4.7.0-0.okd-2021-09-19-013247.tar.gz +``` + +
+ +oc 와 kubectl 화일이 생성 된 것을 확인 할수 있습니다. +oc 는 openshift console 이고 kubectl 은 kubernetes client tool 입니다. + + +```bash +root@edu2:~# ls +README.md cloud-init-setting.sh kubectl oc openshift-client-linux-4.7.0-0.okd-2021-09-19-013247.tar.gz +``` + +
+ +path를 추가 합니다. + +```bash +echo 'export PATH=$PATH:.' >> ~/.bashrc && source ~/.bashrc +``` + +
+ +oc 명령어를 입력해 봅니다. + +```bash +root@edu2:~# oc +OpenShift Client + +This client helps you develop, build, deploy, and run your applications on any +OpenShift or Kubernetes cluster. It also includes the administrative +commands for managing a cluster under the 'adm' subcommand. + +To familiarize yourself with OpenShift, login to your cluster and try creating a sample application: + + oc login mycluster.mycompany.com + oc new-project my-example + oc new-app django-psql-example + oc logs -f bc/django-psql-example + +To see what has been created, run: + + oc status + +and get a command shell inside one of the created containers with: + + oc rsh dc/postgresql + +To see the list of available toolchains for building applications, run: + + oc new-app -L + +Since OpenShift runs on top of Kubernetes, your favorite kubectl commands are also present in oc, +allowing you to quickly switch between development and debugging. You can also run kubectl directly +against any OpenShift cluster using the kubeconfig file created by 'oc login'. + +For more on OpenShift, see the documentation at https://docs.openshift.com. + +To see the full list of commands supported, run 'oc --help'. +``` + +
+ +VM 에서 접속 테스트를 합니다. +아이디는 `namespace 이름 - admin` 으로 구성이 되고 namespace 생성시에 자동 생성이 됩니다. + + +
+ +`oc login -u <아이디> -p <패스워드> --insecure-skip-tls-verify` + +
+ +```bash +root@edu2:~# oc login https://api.211-34-231-81.nip.io:6443 -u edu1-admin -p New1234! --insecure-skip-tls-verify +Login successful. + +You have one project on this server: "edu1" + +Using project "edu1". +Welcome! See 'oc help' to get started. +``` + +
+ ### Git 설치.
@@ -102,6 +319,49 @@ git --version
+ +### Helm 설치. + +
+ + +helm 3.x 이상 버전을 설치한다. + +
+ + +```bash +curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 +``` + +
+ + +```bash +chmod 700 get_helm.sh +``` + +```bash +./get_helm.sh +``` + + + +버전을 확인한다. + +```bash +helm version +``` + + + +helm repository 목록을 조회합니다. 처음 설치 했을때는 아무것도 없습니다. + +```bash +helm repo list +``` + + ### Git Clone 하여 github 소스 가져오기. github에서 shclub/edu2 를 선택하고 code를 클릭한다. @@ -274,7 +534,9 @@ docker images -Docker Hub에 전송하기 위해서는 tagging을 하고 push를 한다. +로컬에서 생성된 이미지를 공유하기 위해서는 Docker Hub 에 저장을 해야 하고 그 전에 Docker Hub에서 계정을 생성한다. ( private repository 는 1개만 가능 ) + +계정 생성 후에 tagging 을 하고 push를 한다. tag 명령어 뒤에는 로컬 이미지 이름 , 다음에는 도커허브 이미지 이름을 입력. ```bash diff --git a/k8s_basic_hands_on.md b/k8s_basic_hands_on.md index 1e4b674..5061665 100644 --- a/k8s_basic_hands_on.md +++ b/k8s_basic_hands_on.md @@ -685,13 +685,19 @@ flask-edu4-app ClusterIP 10.43.119.5 5000/TCP 3s ```bash root@jakelee:~# oc expose svc/flask-edu4-app --name flask-edu +route.route.openshift.io/flask-edu exposed +root@jakelee:~# kubectl get route +NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD +edu-shclub edu-shclub.apps.211-34-231-82.nip.io mynginx 80 None +flask-edu flask-edu-shclub.apps.211-34-231-82.nip.io flask-edu4-app 5000 None ``` -route 조회해 본다. +
+ +웹브라우저에서 해당 url을 조회해 본다. + +http://flask-edu-shclub.apps.211-34-231-82.nip.io -```bash -root@jakelee:~# kubectl get route -```