티스토리 뷰
7탄!! 쿠버네티스에 pod 올리자! pod? 뭐에요?
9탄!! 쿠버네티스 오토스케일링(kubernetes autoscaling)
#기타 참고하기
헬름챠트로 올리기[샘플]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가 생성하지 않은 컨테이너를 관리하지 않습니다.
'3. 쿠버네티스의 모든것' 카테고리의 다른 글
7탄!! 쿠버네티스에 pod 올리자! pod? 뭐에요? (0) | 2020.03.22 |
---|---|
6탄 !! 도커 컴포즈 VS 쿠버네티스 컴포즈 (0) | 2020.03.22 |
5탄!! helm 설치 (부록 : 프로메테우스 설치 Ver 3.0) (2) | 2020.03.21 |
4탄!! NFS 설정입니다. (0) | 2020.03.21 |
3탄!! 쿠버네티스 WORKER NODE 환경 구성 (0) | 2020.03.19 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- directory copy 후 startup 에러
- 트리이스
- Oracle
- 테라폼
- startup 에러
- 키알리
- 5.4.0.1072
- 코로나19
- 우분투
- 앤시블
- 쿠버네티스
- 오라클
- 스토리지 클레스
- pod 상태
- 오라클 인스턴트클라이언트(InstantClient) 설치하기(HP-UX)
- [오라클 튜닝] sql 튜닝
- 커널
- [오라클 튜닝] instance 튜닝2
- 여러서버 컨트롤
- ubuntu
- MSA
- 오라클 트러블 슈팅(성능 고도화 원리와 해법!)
- 버쳐박스
- CVE 취약점 점검
- (InstantClient) 설치하기(HP-UX)
- 설치하기(HP-UX)
- 튜닝
- ORACLE 트러블 슈팅(성능 고도화 원리와 해법!)
- 오라클 홈디렉토리 copy 후 startup 에러
- K8s
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함