티스토리 뷰

1탄!! 쿠버네티스 구성준비/Master & Node

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

3탄!! Kubernetes 구성도 알아보자!

4탄!! NFS 설정입니다.

5탄!! helm install 방법

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

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

8탄!! K8S 대시보드 설치

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

10탄!! K8S Namespace 생성방법

11탄!! 쿠버네티스 용어 정리

12탄!! 도커 깔끔히 삭제하기

# 부록 쿠버네티스 트러블 슈팅!!~

#기타 참고하기  

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

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

쿠버네티스(튜토리얼 실습)

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

헬름챠트로 올리기[샘플]11) 쿠버네티스 가상스토리지(Ceph) 설치

 

서버 모니터링에 좋은 명령어 소개합니다.

# systemd-cgls
# systemd-cgls
# systemd-analyze
# systemd-analyze blame
# systemd-analyze critical-chain
# systemd-analyze plot > analyze.svg

$systemd-cgtop

 

[에필로그] 장애 처리 

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) 처리방법
export KUBECONFIG=/etc/kubernetes/admin.conf
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

2) x509 에러 발생한 경우
Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "cryify candidate authority certificate "kubernetes")


# kubectl get nodes
NAME      STATUS   ROLES    AGE   VERSION
kuber1m   Ready    master   85s   v1.17.4

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

3) kubelet 재시작
$systemctl restart kubelet 

 

4. 에러시 이렇게 아래처럼 입력해보세요~

kubeadm reset

kubeadm init --apiserver-advertise-address=192.168.56.150
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
export kubever=$(kubectl version | base64 | tr -d '\n')
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$kubever"

$ kubeadm reset
$ kubeadm join 192.168.56.150:6443 --token ywxnui.tm5ssojqlbjwzp3a     --discovery-token-ca-cert-hash sha256:f5b21bb40ced8d371ad3d2d4cefdf289033c5f4836d2f03fe9567f11f1a14faa

 

5. kubectl get 할때마다 No resources found in default namespace. 이런 메세지가 나타나요 어떻게 처리 하죠?

 

root@kuber1m test]# kubectl get deployment
No resources found in default namespace.
[root@kuber1m test]# kubectl get pods -o wide
No resources found in default namespace.
[root@kuber1m test]# kubectl get deployment
No resources found in default namespace.
[root@kuber1m test]# kubectl describe deployments my-nginx
Error from server (NotFound): deployments.apps "my-nginx" not found
[root@kuber1m test]# cat /etc/hosts

!처리방법

노드에 레이블 추가
노드 나열 레이블과 함께 클러스터에서 :

kubectl get nodes --show-labels
출력은 다음과 유사합니다.

NAME      STATUS    ROLES    AGE     VERSION        LABELS
worker0   Ready     <none>   1d      v1.13.0        ...,kubernetes.io/hostname=worker0
worker1   Ready     <none>   1d      v1.13.0        ...,kubernetes.io/hostname=worker1
worker2   Ready     <none>   1d      v1.13.0        ...,kubernetes.io/hostname=worker2
노드 중 하나를 선택하고 레이블을 추가하십시오.

kubectl label nodes <your-node-name> disktype=ssd
여기서 <your-node-name>선택한 노드의 이름입니다.

선택한 노드에 disktype=ssd레이블 이 있는지 확인하십시오 .

kubectl get nodes --show-labels
출력은 다음과 유사합니다.

NAME      STATUS    ROLES    AGE     VERSION        LABELS
worker0   Ready     <none>   1d      v1.13.0        ...,disktype=ssd,kubernetes.io/hostname=worker0
worker1   Ready     <none>   1d      v1.13.0        ...,kubernetes.io/hostname=worker1
worker2   Ready     <none>   1d      v1.13.0        ...,kubernetes.io/hostname=worker2
이전 출력에서 worker0노드에 disktype=ssd레이블 이 있음을 알 수 있습니다 .


선택한 노드에 예약 된 포드를 만듭니다.
이 포드 구성 파일은 노드 선택기가있는 포드를 설명합니다 disktype: ssd. 즉, disktype=ssd레이블 이있는 노드에서 포드가 예약됩니다 .

pods/pod-nginx.yaml pods / pod-nginx.yaml을 클립 보드에 복사
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    env: test
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  nodeSelector:
    disktype: ssd
구성 파일을 사용하여 선택한 노드에서 스케줄 될 포드를 작성하십시오.

$ kubectl apply -f https://k8s.io/examples/pods/pod-nginx.yaml
포드가 선택한 노드에서 실행 중인지 확인하십시오.

kubectl get pods --output=wide
출력은 다음과 유사합니다.

6. 노드 서버에 에러들 처리 방법

#tailf /var/log/messages  로그를 보시면... 아래 보시면 E0401 에러들을 보실수 있습니다.

에러 처리 방법

아래와 같이 kubelet.service 열어서 수정해주시면 됩니다.
CPUAccounting=true    #<-- 삽입해주세요
MemoryAccounting=true #<-- 삽입해주세요


[root@k8s-node1 ~]# vi /usr/lib/systemd/system/kubelet.service


[Unit]
Description=kubelet: The Kubernetes Node Agent
Documentation=https://kubernetes.io/docs/
Wants=network-online.target
After=network-online.target

[Service]
ExecStart=/usr/bin/kubelet
Restart=always
StartLimitInterval=0
RestartSec=10
CPUAccounting=true    #<-- 삽입해주세요
MemoryAccounting=true #<-- 삽입해주세요
[Install]
WantedBy=multi-user.target
Apr  1 17:22:14 kuber1n kubelet: E0401 17:22:14.861989   13881 summary_sys_containers.go:47] Failed to get system container stats for "/system.slice/docker.service": failed to get cgroup stats for "/system                                                                                .slice/docker.service": failed to get container info for "/system.slice/docker.service": unknown container "/system.slice/docker.service"
Apr  1 17:22:14 kuber1n kubelet: E0401 17:22:14.862444   13881 summary_sys_containers.go:47] Failed to get system container stats for "/system.slice/kubelet.service": failed to get cgroup stats for "/syste                                                                                m.slice/kubelet.service": failed to get container info for "/system.slice/kubelet.service": unknown container "/system.slice/kubelet.service"
Apr  1 17:22:24 kuber1n kubelet: E0401 17:22:24.873032   13881 summary_sys_containers.go:47] Failed to get system container stats for "/system.slice/kubelet.service": failed to get cgroup stats for "/syste                                                                                m.slice/kubelet.service": failed to get container info for "/system.slice/kubelet.service": unknown container "/system.slice/kubelet.service"
Apr  1 17:22:24 kuber1n kubelet: E0401 17:22:24.873055   13881 summary_sys_containers.go:47] Failed to get system container stats for "/system.slice/docker.service": failed to get cgroup stats for "/system                                                                                .slice/docker.service": failed to get container info for "/system.slice/docker.service": unknown container "/system.slice/docker.service"
Apr  1 17:22:30 kuber1n journal: INFO: 2020/04/01 08:22:30.390053 Removed unreachable peer a2:50:24:d6:ff:0f(kuber2n4)
Apr  1 17:22:34 kuber1n kubelet: E0401 17:22:34.884908   13881 summary_sys_containers.go:47] Failed to get system container stats for "/system.slice/kubelet.service": failed to get cgroup stats for "/syste                                                                                m.slice/kubelet.service": failed to get container info for "/system.slice/kubelet.service": unknown container "/system.slice/kubelet.service"
Apr  1 17:22:34 kuber1n kubelet: E0401 17:22:34.884931   13881 summary_sys_containers.go:47] Failed to get system container stats for "/system.slice/docker.service": failed to get cgroup stats for "/system

 

 

깔끔하게 처리된 모습을 보실수 있습니다.

Auto Scaling

CPU, memory 사용량에 따른 확장은 기본이고 현재 접속자 수와 같은 값을 사용할 수도 있습니다.
컨테이너의 개수를 조정하는 Horizontal Pod Autoscaler(HPA), 컨테이너의 리소스 할당량을
조정하는 Vertical Pod Autoscaler(VPA), 서버 개수를 조정하는 Cluster Autosclaer(CA) 방식이 있습니다.
kubectl autoscale deployment volttest --cpu-percent=1 --min=3 --max=5


[root@kuber1m test]# cat autoscaling.yaml
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: volttest-hpa
namespace: default
spec:
maxReplicas: 6
minReplicas: 3
scaleTargetRef:
apiVersion: extensions/v1beta1
kind: StatefulSet
name: volttest
targetCPUUtilizationPercentage: 1
[root@kuber1m test]# kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
volttest-hpa StatefulSet/volttest <unknown>/1% 3 6 0 8m24s
하지만 cpu reauest옵션이 없어서 hpa가 cpu사용량에 필요한 계산을 할 수 없어서 상태가
<unknown>으로 나오고 있는 상태다.
계산을 할수가 없으니까 당연히 오토스케일링이 안되겠지...
(정확히 맞는 설정인지는 모르겠지만)


helm install --name heapster stable/heapster --namespace kube-system
kubectl convert -f heapster.yaml –output-version apps/v1
[helm install]
yum install epel-release
yum install snapd
systemctl enable --now snapd.socket
ln -s /var/lib/snapd/snap /snap
snap install helm --classic
해당url로 heapster 에러
https://stackoverflow.com/questions/52860209/kubernetes-1-11-could-not-find-heapster-for-metrics
오토스케이링 관련 yaml 파일에 클러스터 지정해 줄 수 있는지 확인필요!
아무래도 기존에 한번 올라간 애들이 한 클러스터 인것 같은대.. 거기에 하나의 클러스터로 묶이지를 못하는 것 같다.
진짜 이문제 인것 같다.. ㅠㅠ
[오토스케일링]
https://skysoo1111.tistory.com/69?category=804704
Stack OverflowStack Overflow
Kubernetes 1.11 could not find heapster for metrics
I'm using Kubernetes 1.11 on Digital Ocean, when I try to use kubectl top node I get this error: Error from server (NotFound): the server could not find the requested resource (get services http:
sourcesource
# k8s Horizontal Pod Autoscaler (HPA) 실습 - 2
지난 글 (# k8s Horizontal Pod Autoscaler (HPA) 실습 - 1)에 이어서 이번엔 Memory 부하 테스트에 따른 Autoscaling을 실습을 진행하겠다. 사실 k8s를 공부하면서 가장 힘든 것은 버전 up에 따른 이슈들인데, 버..

나가는 말

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

 

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

 

가보시죠!

 

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


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

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

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

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

4탄 NFS 설정입니다.

5탄!! helm install 방법

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

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

부록 도커 깔끔히 삭제하기 그리고 연습하기

댓글