티스토리 뷰

도커 깔끔히 삭제하기

1탄!! 쿠버네티스 구성준비!(후지쯔 교육자료)

2탄!! 쿠버네티스 설치 준비[마스터노드]

3탄!! 쿠버네티스 WORKER NODE 환경 구성

4탄 NFS 설정입니다.

5탄!! helm install 방법

6탄 !! 도커 컴포즈 VS 쿠버네티스 컴포즈

7탄!! 쿠버네티스에 pod 올리자! pod? 뭐에요?

부록!! 쿠버네티스 장애 처리5탄

 

부록!! 쿠버네티스 장애 처리5탄부록!! 쿠버네티스 장애 처리

K8S 대시보드 설치

쿠버네티스 오토스케일링(kubernetes autoscaling)

쿠버네티스 용어 정리

마이크로 쿠버네티스 설치 해보기

K8S Namespace 생성방법

쿠버네티스(컨테이너) 환경 구축의 어려운점~!

쿠버네 티스 튜토리얼 실습

쿠버네티스와 컨테이너를 쉽게 이해하기

쿠버네티스 초기설치및  볼트 디비 올리기[샘플]

헬름챠트로 올리기[샘플]

[Kubernetes MASTER NODE 환경 구성] 

kube-controller-manager
쿠베 컨트롤러 매니저
개요
Kubernetes 컨트롤러 관리자는 Kubernetes와 함께 제공되는 핵심 제어 루프를 포함하는 데몬입니다. 
로봇 및 자동화 응용 분야에서 제어 루프는 시스템 상태를 조절하는 비 종료 루프입니다. 
Kubernetes에서 컨트롤러는 apiserver를 통해클러스터의 공유 상태를 감시하고 상태를 원하는 상태로
이동하려고 시도하는 변경을 수행하는 제어 루프입니다. 현재 Kubernetes와 함께 제공되는 컨트롤러의
예로는 복제 컨트롤러, 엔드 포인트 컨트롤러, 네임 스페이스 컨트롤러 및 serviceaccounts 컨트롤러가
있습니다.


kube-apiserver
개요
Kubernetes API 서버는 포드, 서비스, 복제 컨트롤러 등을 포함하는 API 개체에 대한 데이터의 
유효성을 검사하고 구성합니다. API 서버는 REST 작업을 서비스하고 다른 모든 구성 요소가 상호 
작용하는 클러스터의 공유 상태에 대한 프런트 엔드를 제공합니다.

cloud-controller-manager
개요
클라우드 컨트롤러 관리자는 Kubernetes와 함께 제공되는 클라우드 특정 제어 루프를 포함하는 
데몬입니다.

kube-scheduler
개요 
Kubernetes 스케줄러는 정책이 풍부하고 토폴로지를 인식하는 워크로드 별 기능으로 가용성, 성능 및 
용량에 크게 영향을줍니다. 
스케줄러는 개별 및 집단 자원 요구 사항, 서비스 품질 요구 사항, 하드웨어 / 소프트웨어 / 정책
제한 조건, 선호도 및 반 선호도 스펙, 
데이터 위치, 워크로드 간 간섭, 마감일 등을 고려해야합니다. 필요에 따라 작업 부하 별 요구 
사항이 API를 통해 노출됩니다. 스케줄링 및
kube-scheduler 구성 요소에 대한 자세한 정보는 스케줄링 을 참조하십시오 .

Kubernetes를위한 etcd 클러스터 운영
etcd는 모든 클러스터 데이터에 대한 Kubernetes의 백업 저장소로 사용되는 일관되고 가용성이 
높은 키 값 저장소입니다.Kubernetes 클러스터가 etcd를 백업 저장소로 사용하는 경우 해당 
데이터에 대한 백업 계획 이 있는지 확인하십시오 .
공식 문서 에서 etcd에 대한 자세한 정보를 찾을 수 있습니다 .
생성이든, 수정이든, 또는 삭제든 쿠버네티스 오브젝트를 동작시키려면, 쿠버네티스 API를 이용해야 한다.
예를 들어, kubectl 커맨드-라인 인터페이스를 이용할 때, CLI는 여러분 대신 필요한 쿠버네티스 API를 
호출해 준다. 또한, 여러분은 클라이언트 라이브러리 중 하나를 이용하여 여러분만의 프로그램에서 
쿠버네티스 API를 직접 이용할 수도 있다.


kubeadm이란?
kubeadm은 Kubernetes Cluster 생성을 위한 kubeadm init과 kubeadm join을 위한 툴이다. 

kubeadm init : Control-plane 노드의 부트스트랩
kubeadm join : Worker 노드를 부트스트랩하고 Cluster에 조인
kubeadm upgrade : Kubernetes Cluster를 신규 버전으로 업그레이드
kubeadm config : kubeadm 1.7 이하 버전 사용 시 Cluster를 초기화할 때 kubeadm upgrade를 위한 Cluster 설정
kubeadm token : kubeadm join을 위한 토큰 관리
kubeadm reset : kubeadm 혹은 kubeadm join에 의해 호스트에 발생한 변경 사항을 원복
kubeadm version : 버전 출력
kubeadm alpha : 커뮤니티로부터 피드백을 수집하기 위해 준비된 기능들을 미리 확인

 ㅇ 쿠버네티스 YUM 리포지토리 설정

 ㅇ [kubeadm 설치하고 kubelet (agnet) , docker 실행을 합니다.]

//레파지토리에 내용을 추가합니다.  kubernetes 저장소 정보 추가
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF

//kubeadm 설치, kubelet start , docker start  합니다.
yum install kubeadm docker -y
systemctl enable kubelet && systemctl start kubelet 
systemctl enable docker && systemctl start docker

 

 [root 계정으로 클러스터 관리할 수 있게 생성된 자격증명을 복사]

$mkdir -p $HOME/.kube

$cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

$chown $(id -u):$(id -g) $HOME/.kube/config

네트웍 설정 ! 중요합니다.  weave 를 사용하여 설치 함을 알려드립니다. 

$export kubever=$(kubectl version | base64 | tr -d '\n')

$kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$kubever"

 ㅇ [kubeadm  실행]

//kubeadm 을 실행해봅니다.


$kubeadm init --apiserver-advertise-address=192.168.56.150 --pod-network-cidr=10.244.0.0/16

 [token 확인 하시길 바랍니다. (워크노드에서 필요합니다.)]

kubeadm init 으로 초기화를 하게 되면 마지막에 아래와 같이 토큰을 생성해주는데 
토큰은 node join시 필요하다.

kubeadm join 192.168.56.150:6443 --token 5kcw84.9bbc312hgvp8guxn --discovery-token-ca-cert-hash sha256:2d1001c21cbb66c151832ba8effedeb3f0506996cf26af21ed824d29a25be150
    

 

[마스터 노드를 상태를 확인해봅니다.]

  • STATUS (상태) Notready 라고 보이시나요? 아직 준비가 안되었다는 뜻입니다.
  • ready 상태로 변경 하려면 어떻게 할까요?
$ kubectl get nodes
NAME      STATUS     ROLES    AGE    VERSION
kuber1m   NotReady   master   50s   v1.17.3

 

 

pod network 생성이 완료 되었습니다.

  • pod network 생성이후 master가 NotReady -> Ready 로 변경됨을 확인할 수 있다.
$kubectl get nodes
NAME      STATUS   ROLES    AGE     VERSION
kuber1m   Ready    master   3m25s   v1.17.3

 

설치확인

 

설치 확인하기
다음 명령어로 쿠버네티스의 구성 요소가 모두 동작하는 것을 확인할 수 있습니다.

$kubectl get componentstatuses
NAME                 STATUS    MESSAGE              ERROR
scheduler            Healthy   ok                   
controller-manager   Healthy   ok                   
etcd-0               Healthy   {"health": "true"}
쿠버네티스의 구성 요소가 Pod 으로 어떤 노드에 떠있는지 확인할 수 있습니다. etcd, API server, Scheduler, Controller Manager, DNS Server 는 master 에서 실행됩니다. Kube proxy 와 Weave 는 각 worker 에서 실행됩니다.

$kubectl get po -o custom-columns=POD:metadata.name,NODE:spec.nodeName --sort-by spec.nodeName -n kube-system
POD                              NODE
kube-proxy-pz25z                 master
etcd-master                      master
kube-apiserver-master            master
kube-controller-manager-master   master
kube-scheduler-master            master
weave-net-8npbk                  master
coredns-86c58d9df4-r5qq5         worker-1
weave-net-dbk8x                  worker-1
kube-proxy-8mrkx                 worker-1
coredns-86c58d9df4-tsdf4         worker-1
weave-net-bds9l                  worker-2
kube-proxy-7pn22                 worker-2

이제 설치가 잘 되었는지 Pod 을 배포하고 동작을 확인해보겠습니다.

  • 간단한 Pod 배포하기
  • 복잡한 Microservices 애플리케이션 배포하기

 

간단한 Pod 배포하기
먼저 간단한 Pod 을 배포해서 동작을 확인해봅시다. 다음과 같은 pod-test.yaml 파일을 생성합니다.

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-container
    image: busybox
    command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 3600']

 

해당 Pod 이 실행되면 busybox 라는 경량 리눅스 이미지에 Hello Kubernetes! 라는 로그가 잠시 동안 출력되고 Pod 은 종료될겁니다.

이제 해당 Pod 을 배포합니다.

 

 

$kubectl apply -f pod-test.yaml

 

 

해당 Pod 이 정상적으로 실행된 것을 볼 수 있습니다.

 

 

kubectl get po
NAME        READY   STATUS    RESTARTS   AGE
myapp-pod   1/1     Running   0          6s

로그도 확인해봅니다.


kubectl logs myapp-pod
Hello Kubernetes!

 

 

 

 

 

 

*******************************

[에필로그] 장애 처리 

1. 아래와 같이 에러가 발생합니다. 원인은 최소 2CPU 정도 설정하라는 내용이네요 .

 ㅇ먼저 가상머신 버쳐박스에 설정을 클릭합니다.

  • [해결방법은! 가상머신에 프로세서를 2개 cpu로 수정해봅니다.]

  • [kubeadm init 실행해봅니다.]
    • 정상적으로 잘 올라오죠?

2. 아래와같이 에러 나시는분들은 kubeadm reset 을 통해 간단히 처리 하시면 됩니다

[root@localhost ~]# kubeadm reset

3. 아래와 메세지 에러가 발생한경우!

The connection to the server localhost:8080 was refused - did you specify the right host or port?


쿠버네티스가 옳바르게 설치되어있다는 가정하에... 
1) 처리방법
$mkdir -p $HOME/.kube
$sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$sudo chown $(id -u):$(id -g) $HOME/.kube/config

2) 일반 사용자 권한에 추가 하는 방법
$export KUBECONFIG=/etc/kubernetes/admin.conf

3) root권한에서 환경변수 등록 / 컨테이너 모두 삭제
$docker rm $(docker ps -a -q) 

3) kubelet 재시작
$systemctl restart kubelet 

 

4. 무엇인가요?

//docker 는 알겠는데... kubelet 은 무엇인가요?


kubelet은 각 노드에서 실행되는 기본 "노드 에이전트"입니다. 
다음 중 하나를 사용하여 apiserver에 노드를 등록 할 수 있습니다. 
호스트 이름을 무시하는 플래그; 또는 클라우드 제공 업체를위한 특정 로직.
kubelet은 PodSpec 측면에서 작동합니다. PodSpec은 포드를 설명하는 YAML 또는 JSON 객체입니다. 
kubelet은 다양한 메커니즘을 통해 (주로 apiserver를 통해) 제공되는 PodSpec 세트를 가져 와서 
해당 PodSpec에 설명 된 컨테이너가 정상적으로 작동하는지 확인합니다. 
kubelet은 Kubernetes가 생성하지 않은 컨테이너를 관리하지 않습니다.

5. Notready 만 돌고 reday 안될경우 

네트웍 설정이 빠졌는지 다시 한번 실행해주세요

$export kubever=$(kubectl version | base64 | tr -d '\n')

$kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$kubever"

나가는 말

참.. 별거 아닌 에러에 시간이 너무 소비가 됩니다. 알면 7초 모르면 일주일... 연속삽질!!

 

자.. 이제 워크 노드 환경 설정및 셋팅 해볼까요?

 

가보시죠!

 

도커 깔끔히 삭제하기

1탄!! 쿠버네티스 구성준비!(후지쯔 교육자료)

2탄!! 쿠버네티스 설치 준비[마스터노드]

3탄!! 쿠버네티스 WORKER NODE 환경 구성

4탄 NFS 설정입니다.

5탄!! helm install 방법

6탄 !! 도커 컴포즈 VS 쿠버네티스 컴포즈

7탄!! 쿠버네티스에 pod 올리자! pod? 뭐에요?

부록!! 쿠버네티스 장애 처리5탄

댓글