K8s Secret?

  • 시크릿은 비밀번호, OAuth 토큰, SSH 키 같은 민감한 정보들을 저장하는 용도로 사용
  • 구성정보를 base64로 인코딩해서 한곳에서 관리
    • 인코딩된 정보가 pod로 전달되면 해당 정보는 디코딩 된 형태로 보임
  • secret의 최대 크기는 1MB
  • Secret는 etcd에 암호화 하지 않은 텍스트 형태로 저장됨
kubectl create secret <Available Commands> name
                        docker-registry
                        generic
                        tls
                        
 ex)
 kubectl create secret tls my-secret --cert=path/to/certi/file --key=path/to/key/file
 
 kubectl creaate secret docker-registry reg-secret --docker-username=xxx \
   --docker-password=pass --docker-email=xxx@gmail.com
   
kubectl creaate secret genetic generic-secret \
--from-literal=INTERVAL=2 --from-file=/config/

 

 

K8s Secret 생성 테스트

apiVersion: v1
kind: Pod
metadata:
  name: genid-env-secret
spec:
  containers:
  - image: ubuntu
    command: ["bash"]
    args:
    - "-c"
    - sleep 100000
    env:
    - name: INTERVAL
      valueFrom:
        secretKeyRef:
          name: test-secret
          key: INTERVAL
    name: generator
    volumeMounts:
    - name: html
      mountPath: /webdata
  - image: nginx:1.14
    name: web-server
    volumeMounts:
    - name: html
      mountPath: /usr/share/nginx/html
      readOnly: true
    ports:
    - containerPort: 80
  volumes:
  - name: html
    emptyDir: {}

  • # kubectl create secret generic test-secret --from-literal=INTERVAL=2 --from-file=./genid-web-config/

 

 

K8s Secret 볼륨마운트 테스트

apiVersion: v1
kind: Pod
metadata:
  name: genid-env-secret
spec:
  containers:
  - image: ubuntu
    command: ["bash"]
    args:
    - "-c"
    - sleep 100000
    env:
    - name: INTERVAL
      valueFrom:
        secretKeyRef:
          name: test-secret
          key: INTERVAL
    name: generator
    volumeMounts:
    - name: html
      mountPath: /webdata
    - name: config
      mountPath: /etc/nginx/conf.d
  - image: nginx:1.14
    name: web-server
    volumeMounts:
    - name: html
      mountPath: /usr/share/nginx/html
      readOnly: true
    ports:
    - containerPort: 80
  volumes:
  - name: html
    emptyDir: {}
  - name: config
    secret:
      secretName: test-secret
      items:
      - key: nginx-config.conf
        path: nginx-config

 

'클라우드 > K8s' 카테고리의 다른 글

K8s 인증과 권한관리  (0) 2022.04.03
Pod 스케줄링  (0) 2022.04.03
K8s Configmap  (0) 2022.03.31
K8s 버전 업그레이드  (0) 2022.03.18
K8s 애플리케이션 변수관리  (0) 2022.03.17

K8s Configmap란?

  • 컨테이너에 필요한 환경 설정을 컨테이너와 분리해서 제공하는 기능
  • 컨테이 구성 정보를 한곳에 모아서 관리
  • Configmap을 단일진입점으로 Pod가 생성/재시작 할때마다 해당 Configmap을 참조하도록 하는게 가능
//형식
kubectl create configmap CONFIG_NAME --from-literal=id=jaon --from-literal=age=30
                                                   key value             key value 
kubectl create configmap CONFIG_NAME -- from-file=text.file
                                                    key  내용: value 
kubectl create configmap CONFIG_NAME --from-file=mydate=text.file
                                                   key     value
kubectl create configmap CONFIG_NAME --from-file=/config_dir/
                                              directory file전부

 

 

Configmap 생성 테스트

  • # kubectl create configmap test-config --from-literal=INTEVAL=2 --from-literal=OPTION=boy --from-file=config.dir/
    • configmap 생성
  • # kubectl describe configmaps test-config
  • # kubectl edit configmap test-config
    • configmap 수정

 

apiVersion: v1
kind: ConfigMap
metadata:
  name: config-test
  namespace: default
data:
  URL: localhost
  USER: myuser
  PASS: mypass
  DEBUG_MODE: info

  • yaml 형식으로 configmap 생성

 

 

Configmap Pod에 일부 configmap 적용 테스트

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: configmap-test
  name: configmap-test
spec:
  replicas: 3
  selector:
    matchLabels:
      app: configmap-test
  template:
    metadata:
      labels:
        app: configmap-test
    spec:
      containers:
      - image: nginx
        name: nginx
        env:
        - name: DEBUG_LEVEL
          valueFrom:
            configMapKeyRef:
              name: config-test
              key: DEBUG_MODE
        - name: URL
          valueFrom:
            configMapKeyRef:
              name: config-test
              key: URL

  • configmap에서 pod에 일부 적용된 환경변수 조회

 

 

Configmap Pod에 전체 configmap 적용 테스트

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: configmap-test
  name: configmap-test
spec:
  replicas: 3
  selector:
    matchLabels:
      app: configmap-test
  template:
    metadata:
      labels:
        app: configmap-test
    spec:
      containers:
      - image: nginx
        name: nginx
        envFrom:
        - configMapRef:
            name: config-test

  • configmap의 전체 내용을 pod에 적용

 

 

Configmap 볼륨 적용 테스트

apiVersion: v1
kind: Pod
metadata:
  name: configmap-volume-test
spec:
  containers:
  - image: ubuntu
    name: id-generator
    command:
    - sleep
    - "100000"
    env:
    - name: INTERVAL
      valueFrom:
        configMapKeyRef:
          name: test-config
          key: INTERVAL
    volumeMounts:
    - name: html
      mountPath: /webdata
  - image: nginx
    name: web-server
    ports:
    - containerPort: 80
    volumeMounts:
    - name: html
      mountPath: /usr/share/nginx/html
      readOnly: true
    - name: config
      mountPath: /etc/nginx/conf.d
      readOnly: true
  volumes:
  - name: html
    emptyDir: {} #pod의 container간 volume mount (/webdata와 /usr/share/nginx/html path연결)
  - name: config
    configMap:
      name: test-config
      items:
      - key: nginx-config.conf #configmap test-conf의 key
        path: nginx-config.confs #생성할 파일이름
      - key: INTERVAL #configmap test-conf의 key
        path: IS_IS_INTERVAL

'클라우드 > K8s' 카테고리의 다른 글

Pod 스케줄링  (0) 2022.04.03
K8s Secret  (0) 2022.03.31
K8s 버전 업그레이드  (0) 2022.03.18
K8s 애플리케이션 변수관리  (0) 2022.03.17
K8s Self-healing  (0) 2022.03.17

livenessProbe

  • 컨테이너의 실행 여부를 진단하여 실패시 컨테이너를 종료시키고 재시작 정책에 따라 컨테이너 재시작
    • (Pod을 재시작하는 것이 아니라 Container을 재시작하는 한다.)
  • 컨테이너가 재시작되더라도 Pod의 IP address는 바뀌지 않는다.

 

 

 

livenessProbe 매커니즘

  • httpGet
    • 지정한 IP주소, port, path에 HTTP GET 요청을 보내, 해당 컨테이너의 응답을 확인
    • 반환코드가 200이 아닌 값이 나오면 컨테이너 재시작
  • tcpSocket
    • 지정된 포트에 TCP연결을 시도하여 연결되지 않으면 컨테이너 재시작
  • exec
    • exec 명령을 전달하고 명령 종료코드가 0이 아닌값이면 컨테이너 재시작
livenessProbe 필드 설명
initialDelaySeconds ( default: 0초 ) pod 실행 후 delay할 시간
periodSeconds (default: 10초) health check 검사 주기
timeoutSeconds (default: 1초)  health check 요청에 대한 응답대기시간
successThreshold (default: 1번) 성공 횟수
failureThreshold (default: 3번) 연속 실패횟수

 

 

 

livenessProbe 테스트

  • redis pod의 livenessProbe를 설정하여 container 정상성 확인

 

 

redis liveness probe 실패

  • liveness probe가 연속 3회(default) 실패하면 컨테이너 재시작
    • 컨테이너의 httpGet 요청이 실패

 

 

 

livenessProbe 멀티컨테이너 테스트

livenessProbe 멀티컨테이너

  • redis와 nginx 멀티컨테이너 생성(성공)

 

 

멀티 컨테이너 생성실패

  • 단일 pod 멀티컨테이너는 서로 리소스를 공유하므로 redis가 사용하는 6379 port를 각각 binding 할 수 없다.

 

 

 

readinessProbe

  • 컨테이너 실행된 후 실제로 서비스에 대한 응답을 할 수 있는지 진단
  • 해당 진단이 실패하는 경우 엔드포인트 컨트롤러는 해당 파드에 연결된 모든 서비스를 대상으로 엔드포인트 정보를 제거 
  • 해당 pod가 readinessProbe를 지원하지 않는 경우 기본 상태값은 succeed

'클라우드 > K8s' 카테고리의 다른 글

K8s 버전 업그레이드  (0) 2022.03.18
K8s 애플리케이션 변수관리  (0) 2022.03.17
K8s label  (0) 2022.03.17
K8s Network  (0) 2022.03.17
K8s Controller  (0) 2022.03.17

K8s label란?

  • key value 형태로 구성하며 클러스터 안에 오브젝트를 만들 때 메타데이터로 설정할 수 있다.
  • key는 컨트롤러들이 Pod를 관리 할 때 자신이 관리해야 할 Pod를 구분하는 역할을 함
metadata:
  labels:
    rel: product
    name: mainui

https://kubernetes.io/ko/docs/concepts/overview/working-with-objects/labels/

 

레이블과 셀렉터

레이블 은 파드와 같은 오브젝트에 첨부된 키와 값의 쌍이다. 레이블은 오브젝트의 특성을 식별하는 데 사용되어 사용자에게 중요하지만, 코어 시스템에 직접적인 의미는 없다. 레이블로 오브

kubernetes.io

 

 

label 테스트

apiVersion: v1
kind: Pod
metadata:
  name: label-demo
  labels:
    environment: production
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.14.2
    ports:
    - containerPort: 80

레이블 조회 및 key확인

  • # kubectl get pods --show-labels
  • # kubectl get pod -L app

 

레이블 추가 및 삭제

  • # kubectl label pod label-demo test=foo
    • test1=test1 test2=test2 test3=test3 형식으로 다수의 key-value 지정가능
  • # kubectl label pod label-demo test-
  • # kubectl label pod label-demo app=httpd --overwrite
    • 덮어쓰기

 

조건검색

  • # kubectl get pod -l 'env=prod,creation_method=manual'
    • -l 또는 --selector 사용가능
  • # kubectl delete pods --selector 'env=prod'

 

 

 

Node label

  • Worker Node의 특성을 Label로 설정
  • Worker Node의 특성을 고려하여 Pod를 선택적으로 배치 할 수 있다

 

 

Node label 테스트

  • # kubectl label nodes w1-k8s gpu=true disk=ssd
    • w1-k8s node에 gpu disk label 설정
  • #kubectl label nodes w2-k8s gpu=true
    • w2-k8s node에 gpu label 설정
  • #kubectl label nodes w3-k8s disk=ssd
    • w3-k8s node에 disk label 설정

 

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: node-selector-test
  name: node-selector-test
spec:
  containers:
  - image: nginx
    name: webserver
    ports:
    - containerPort: 80
  nodeSelector:
    gpu: "true"
    disk: ssd

  • nodeSelector에 의해서 설정 된 label이 있는 node가 선택된다

 

 

 

Annotation이란?

  • label과 동일하게 key-value 쌍으로 사용자가 설정 할 수 있다
  • k8s에게 특정 정보를 전달할 용도로 사용
  • 관리를 위해 필요한 정보를 기록할 용도로 사용
    • 릴리즈, 로깅, 모니터링에 필요한 정보들을 기록
annotations:
  builder: "jaon"
  buildDate: "20220331"
  imageRepository: https://xxx.com/"

 

 

Annocation 테스트

apiVersion: v1
kind: Pod
metadata:
  name: annotation-test
  annotations:
    image-registry: "https://hub.docker.com/"
spec:
  containers:
  - image: nginx
    name: annotation-test
    ports:
    - containerPort: 80

 

 

 

Canary Deployment

  • 블루 그린 업데이트
    • 기존에 실행된 Pod의 개수와 같은 개수의 신규 Pod를 모두 실행한 후 신규 Pod가 정상적으로 실행됐는지 확인한 이후 트래픽을 한꺼번에 신규 파드 쪽으로 옮김
    • downtime이 발생함.
  • 롤링 업데이트
    • 배포된 전체 Pod를 한꺼번에 교체하지 않고 일정 개수씩 교체하면서 배포
    • 서비스 중단없이 업데이트하는 방식
  • 카나리 업데이트
    • 기존 버전을 유지한 채로 일부 버전만 신규 Pod로 교체하고 버그나 이상이 없는지 확인

 

 

Canary 배포 테스트

apiVersion: v1
kind: Service
metadata:
  name: mainui-svc
spec:
  selector:
    app: mainui
  ports:
  - port: 8080
    protocol: TCP
    targetPort: 80
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mainui-stable
spec:
  replicas: 2
  selector:
    matchLabels:
      app: mainui
      version: stable
  template:
    metadata:
      labels:
        app: mainui
        version: stable
    spec:
      containers:
      - name: mainui
        image: nginx:1.14
        ports:
        - containerPort: 80
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mainui-canary
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mainui
      version: canary
  template:
    metadata:
      labels:
        app: mainui
        version: canary
    spec:
      containers:
      - name: mainui
        image: nginx:1.15
        ports:
        - containerPort: 80
  • label을 통해서 기존에 구동중인 service에 canary버전을 단일진입점으로 포함시켜서 canary버전을 검증한다
    • canary버전에 문제가 없다면 기존 stable버전의 deployment를 삭제하여 canary버전으로 서비스를 할 수 있다
      • 기존 서비스에 영향을 끼치지 않고 서비스가 가능하다

'클라우드 > K8s' 카테고리의 다른 글

K8s 애플리케이션 변수관리  (0) 2022.03.17
K8s Self-healing  (0) 2022.03.17
K8s Network  (0) 2022.03.17
K8s Controller  (0) 2022.03.17
K8s namespaces  (0) 2022.03.17

K8s 동작 flow

k8s 동작 flow

 

kubernetes 애플리케이션 실행

  • 하나이상의 컨테이너 이미지들을 패키지로 레지스트리에 푸시
  • 쿠버네티스 API 서버에 애플리케이션의 디스크립션(yaml or json) 게시하여 pod를 생성수행 명령

 

 

 

마스터노드와 워커노드의 구성과 통신 구조(쿠버네티스 입문 90가지 예제로 배우는 컨테이너 관리자동화 표준 책 참고)

 

 

master node 컴포넌트

  • 역할 및 특징
    • 클러스터 관리, HA, 보통 애플리케이션을 해당 master node에서는 실행하지는 않음
  • 컴포넌트들 - 관리용 컴포넌트들은 컨네이너로 실행/ 하이퍼큐브라는 바이너리 파일로 컴파일되어있음.
    1.  kubelet
      • 마스터에 있는 Docker 관리
    2. kube-apiserver
      • K8s의 모든 통신의 중심
      • k8s API를 사용하도록 요청을 받고 요청이 유효한지 검사
      • etcd는 kube-apiserver를 통해서만 접근 할 수 있다.
    3. kube-scheduler
      • 현재 클러스터안에서 자원할당이 가능한 노드중 알맞은 노드를 선택
    4. kube-controller-manager
      • 구성요소 복제, 워커 노드추적, 노드 장애 처리등 클러스트 수준 기능을 실행
      • 파드를 관찰하며 개수를 보장
    5. kube-proxy
      • k8s의 network 동작을 관리
      • iptables
    6.  etcd
      • 클러스터 구성을 지속적으로 저장하는 안정적인 분산
      • 고가용성을 제공하는 키-값 저장소
      • worker node들의 상태정보
      • 서버당 1 프로세스만 사용가능
      • 별도의 프로세스로 실행
    7. 애드온
      1. 네트워크 애드온
        • CNI - weave, calico, flaneld 등
      2. dns 애드온
        • coreDNS
      3. 대시보드 애드온
      4. 컨테이너 자원 모니터링
        • cAdvisor
      5. 클러스터 로깅
        • ELK, EFK, DataDog

 

 

Worker node 컴포넌트

  1. kubelet
    • 모든 노드에서 실행되는 ks8 에이전트 데몬
    • cAdvisor
      • 컨테이너 모니터링 툴 
      • 컨테이너 기반의 상태정보 및 H/W 정보를 수집하여 Master node에 전달하고 해당 정보는 etcd에 저장된다
  2. kube-proxy
    • k8s의 network 동작을 관리
    • iptables
  3. container runtime
    • 컨테이너를 실행하는 엔진
    • docker or containerd or runc 등

'클라우드 > K8s' 카테고리의 다른 글

K8s namespaces  (0) 2022.03.17
K8s Pod 구성패턴  (0) 2022.03.17
POD  (0) 2022.03.17
Single Master K8s 설치 및 기본 명령어  (0) 2022.03.17
Kubernetes?  (0) 2022.03.17

설치없이 online k8s 사용방법

Katacoda

https://www.katacoda.com/courses/kubernetes/playground

 

Kubernetes Playground | Katacoda

Use Kubernetes in a hosted sandboxed interactive environment

www.katacoda.com

katacoda system

 

 

Docker playground

https://labs.play-with-k8s.com/

 

Play with Kubernetes

Play with Kubernetes is a labs site provided by Docker and created by Tutorius. Play with Kubernetes is a playground which allows users to run K8s clusters in a matter of seconds. It gives the experience of having a free Alpine Linux Virtual Machine in bro

labs.play-with-k8s.com

Docker playground

 

 

 

로컬 PC에 k8s 설치하는 방법

 

설치환경 : ubuntu 18.04 virtual-box

설치노드

  • Master Node x 1
  • Slave Node x 2

kubernetes 설치

  1. Docker 설치

  • # apt install docker.io

2. Kubeadm 설치(https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/)

공식사이트 설치 명령어 실행

 

kubeadm 설치완료

  • kubeadm
    • 클러스터를 부트스트랩하는 명령
  • kubelet
    • 클러스터의 모든 시스템에서 실행되는 구성 요소로, Pod 및 컨테이너 시작과 같은 작업을 수행
  • kubectl
    • 쿠버네티스 클러스터를 제어하기 위한 커맨드라인 도구

3. Master Node 복제

복제 선택

  • MAC주소 초기화 선택

  • 완전한 복제 선택

  • 현재 머신 상태 선택

  • Master Node x1, work Node x2 설치

  • NatNetwork 추가

  • 각 Node에 위에서 생성한 NatNetwork 추가

  • Node들을 구동하여 상호 Node간 ping 확인

 

  • Master와 work node의 hostName 변경
    • 각 노드의 /etc/hostname 파일에서 hostname변경

 

kubeadm init 시도(error)

  • # kubeadm init
    • swap기능이 on상태이므로 error가 발생.
  • master노드와 work노드의 swap 기능을 전부 끈다
    • # swapoff -a (swap기능을 끔)
      • -- reboot시 swap off 유지되지는 않음.
    • # sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab 
      • -- reboot시 swapoff 유지

kubeadm init 재시도

  • user권한으로 아래 3개의 명령어를 입력
    • # mkdir -p $HOME/.kube
    • # sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    • # sudo chown $(id -u):$(id -g) $HOME/.kube/config

work node join

  • work노드에서 join명령어를 실행한다.
  • # kubeadm join 192.168.35.79:6443 --token b83n95.m91axbvrm2l70inl \  --discovery-token-ca-cert-hash sha256:84d994db7cfa3cfd8eca10e2a7ab6dc6551c860cfea526d1dd720e2b8259a1d2
    • kubeadm init 명령어 성공후 맨하단에 나오는 join명령어를 실행

MasterNode에서 workNode join확인

 

CNI(Container Network Interface) 설치

  • Pod Network
  • Container간 통신을 지원하는 VxLAN
  • 다양한 종류의 플러그인이 존재

 

Weave Net 설치(www.weave.works/docs/net/latest/kubernetes/kube-addon/)

 

 

 

auto completion 적용

https://kubernetes.io/docs/reference/kubectl/cheatsheet/

 

kubectl Cheat Sheet

This page contains a list of commonly used kubectl commands and flags. Kubectl autocomplete BASH source <(kubectl completion bash) # setup autocomplete in bash into the current shell, bash-completion package should be installed first. echo "source <(kubect

kubernetes.io

 

 

 

MiniKube 설치

설치환경: virtual box(Ubuntu 18.04.2)

 

Docker 설치

  • # sudo apt install docker.io -y
  • # sudo chmod 666 /var/run/docker.sock

http://minikube.sigs.k8s.io/docs/start/

  • # curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube_latest_amd64.deb
  • # sudo dpkg -i minikube_latest_amd64.deb
  • # minikube start --driver=docker
  • # sudo snap install kubectl --classic

 

 

 

TroubleShooting

k8s 1.22버전부터는 systemd와 cgroup을 맞춰야함.

sudo mkdir /etc/docker
cat <<EOF | sudo tee /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF

https://kubernetes.io/ko/docs/setup/production-environment/container-runtimes/#%EB%8F%84%EC%BB%A4

 

컨테이너 런타임

파드가 노드에서 실행될 수 있도록 클러스터의 각 노드에 컨테이너 런타임을 설치해야 한다. 이 페이지에서는 관련된 항목을 설명하고 노드 설정 관련 작업을 설명한다. 이 페이지에는 리눅스

kubernetes.io

 

 

 

k8s 기본명령어 테스트

k8s 버전확인

k8s 버전정보

  • # kubectl version --short

 

 

 

k8s 약어확인

k8s 명령어 약어 확인

  • # kubectl api-resources

 

 

 

K8s service API 버전확인

  • kubectl explain <service name>
    • # kubectl explain pod
    • #kubectl explain deployment

 

 

 

Deployment 생성

deployment 생성

  • # kubectl create deployment mainui --image=httpd:latest --replicas=3

 

 

 

Docker 이미지 빌드 및 deployment 생성

컨테이너 이미지 만들기

  • Docker 이미지 빌드
    • # docker build -t http go .

 

컨테이너 푸시

  • docker 이미지 태깅
    • # docker tag test-go fastwon1/test-go
  • Docker.io repository에 push
    • # docker push fastwon1/test-go

 

deployment

  • default ns의 전체 pod 정보 확인
    • # kubectl get pods
  • 이미지 디플로이먼트
    • # kubectl create deployment test-go --image=fastwon1/test-go
      • kubectl create deploy --image alpine:3.4 alpine-deploy --dry-run=client
      • kubectl create deploy --image alpine:3.4 alpine-deploy --dry-run=client -o yaml > alpine.yaml
        • yaml 파일 output
      • # kubectl create -f ./jenkinks.yaml --record=true
  • 디플로이먼트 조회
    • # kubectl get deployment
  • 레플리카셋 조회
    • # kubectl get rs
  • 서비스 조회
    • # kubectl get svc
      • # kubectl get svc -w (-w 옵션:모니터링)

 

expose
expose 확인

  • 서비스 외부노출
    • # kubectl expose deployment test-go --name test-go-svc --port=8080 --type=LoadBalancer
    • # kubectl expose deployment pod-jenkins --name srv-jenkins --dry-run=client --port 8080 -n blue -o yaml >> blue-jenkins-svc.deploy.yaml

 

deployment 및 svc 삭제

  • 디플로이먼트 삭제
    • # kubectl delete deployment test-go
  • 서비스 삭제
    • # kubectl delete svc test-go-svc

 

scaleout

  • 스케일아웃
    • # kubectl scale deploy test-go --replicas=3

 

직접 앱에 접근

  • 해당 컨테이너에 curl명령어 실행
    • # kubectl exec test-go-8677f85fb6-5pzm5 -- curl 10.4.3.228:8080 -s

 

앱 위치 및 포드정보 확인

  • 다중 Pod정보 자세히 출력
    • # kubectl get pod -o wide
  • 단일 Pod정보 자세히 출력
    • # kubectl describe pod test-go-8677f85fb6-5pzm5

 

pod bash 터미널 접속

  • 컨테이너 bash접속
    • # kubectl exec -it fastwon1-jenkins-77fc6594dd-lrclv -- bash
    • kubectl exec -it busybox-pod -- sh

 

테스트 bash

  • kubectl run -it --rm --image busybox -- bash

 

 

etcd

 

  • 명령어
    • 모든 key 조회
      • sudo ETCDCTL_API=3 ./etcdctl --endpoints 127.0.0.1:2379 --cacert /etc/kubernetes/pki/etcd/ca.crt --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key get / --prefix --keys-only
    • key put
      • sudo ETCDCTL_API=3 ./etcdctl --endpoints 127.0.0.1:2379 --cacert /etc/kubernetes/pki/etcd/ca.crt --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key put key1 value1
    • key get
      • sudo ETCDCTL_API=3 ./etcdctl --endpoints 127.0.0.1:2379 --cacert /etc/kubernetes/pki/etcd/ca.crt --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key get key1

key put/get

 

snapshot 생성 및 상태확인

 

  • 백업 명령어
    • sudo ETCDTCL_API=3 ./etcdctl --endpoints 127.0.0.1:2379 --cacert /etc/kubernetes/pki/etcd/ca.crt --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key snapshot save snapshotdb
  • 복구 명령어
    • sudo ETCDTCL_API=3 ./etcdctl --endpoints=127.0.0.1:2379 --cacert /etc/kubernetes/pki/etcd/ca.crt --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key --data-dir /var/lib/etcd-restore --initial-cluster='master=https://127.0.0.1:2380' --name=master --initial-cluster-token this-is-token --initial-advertise-peer-urls https://127.0.0.1:2380 snapshot restore ~/yaml/snapshotdb

 

  • data-dir path 수정
  • initial-cluster-token 추가

 

  • hostPath의 path 수정

'클라우드 > K8s' 카테고리의 다른 글

K8s namespaces  (0) 2022.03.17
K8s Pod 구성패턴  (0) 2022.03.17
POD  (0) 2022.03.17
K8s 동작원리  (0) 2022.03.17
Kubernetes?  (0) 2022.03.17

도커란?

 컨테이너 가상화 환경에서 애플리케이션을 관리하고 실행하기 위한 오픈소스 플랫폼

 

 

 

Kubernetes?

컨테이너 오케스트레이션 시스템

 

 

 

kubernetes는 왜 필요한가?

실제 상용서버를 운용하기에 부족한부분이 존재

  • 보통 상용서비스에서 서버 한대만 사용하지 않음
  • 여러 대 서버에 컨테이너를 배포하는 전체 과정을 수동으로 제어해야함
  • 서버에 장애가 발생했을 때 해당 서버의 컨테이너를 다른 서버로 옮기는 작업도 수동으로 해야함

k8s는 상용서버들을 클러스터로 구성하여 이러한 부분들을 자동화하므로 시스템 운영을 쉽게 한다.

 

 

 

컨테이너 계층구조

컨테이너 계층구조

 

 

 

K8s 특징?

  • 워크로드 분리
  • 어디서나 실행가능 - on-premise, public cloud(AKS, EKS, GKE등)
  • 선언적 API
    • 각 요소가 추구하는 상태를 선언하면 현재 상태와 맞는지 점검하고 그것에 맞추려고 노력하는 구조

 

 

kubernetes cluster&amp;amp;amp;amp;amp;amp;nbsp;architecture

  • 마스터 노드 : 전체 쿠버네티스 시스템을 관리하고 통제하는 쿠버네티스 컨트롤 플레인을 관장
  • 워커 노드 : 실제 배포하고자 하는 애플리케이션 실행 담당

'클라우드 > K8s' 카테고리의 다른 글

K8s namespaces  (0) 2022.03.17
K8s Pod 구성패턴  (0) 2022.03.17
POD  (0) 2022.03.17
K8s 동작원리  (0) 2022.03.17
Single Master K8s 설치 및 기본 명령어  (0) 2022.03.17

+ Recent posts