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
-```