이 페이지에서는 Anthos 비공개 모드를 설치하거나 업그레이드하는 동안 발생할 수 있는 문제를 해결하는 방법을 설명합니다.
기본 요건 문제 해결
Anthos 비공개 모드를 사용하려면 문제 해결을 시작할 수 있도록 관리 워크스테이션에 로그인해야 합니다. 관리자 워크스테이션에 로그인하려면 다음 명령어를 실행합니다.
ssh <USERNAME>@<WORKSTATION>
cd ./anthos-baremetal-private-mode
export PATH=$PWD/bin:$PATH
클러스터 만들기
이 섹션에서는 Anthos 비공개 모드 클러스터를 만들 때 문제를 해결하는 방법을 설명합니다.
관리자 클러스터 생성 실패
이 섹션에는 일반적인 관리자 클러스터 구성, 실행 전 오류를 나열하고 이를 해결하는 방법을 제안합니다.
구성 오류
일반적인 관리자 클러스터 구성 문제로는 구성에 누락된 주석, 레지스트리에 대한 인증 구성 없음, 부트스트랩 클러스터 생성 오류가 있습니다.
구성에 주석 누락
노드 풀 리소스를 만드는 중에 구성 파일에 주석이 포함되어 있지 않으면 다음 오류가 표시될 수 있습니다.
Cluster.baremetal.cluster.gke.io "admin" is invalid: [Spec.LoadBalancer.AddressPools: Forbidden: Field not allowed for admin clusters, Spec.GKEConnect: Required value: Field is required].
이 문제를 해결하려면 관리자 클러스터 구성 파일에 주석을 추가하고 주석을 true
로 설정합니다.
annotations:
baremetal.cluster.gke.io/private-mode: "true"
관리자 클러스터 구성 파일에 적용된 주석의 예시는 관리자 클러스터 및 노드 풀을 참조하세요.
레지스트리의 인증 구성 누락
인증 구성이 누락되면 no auth config found for the registry
오류가 발생할 수 있습니다.
admin.yaml
파일에 지정된 pullCredentialConfigPath
에 엔드포인트에 대한 인증 구성이 포함되어 있는지 확인합니다.
예를 들어 엔드포인트가 https://10.200.0.2
이고 pullCredentialConfigPath
가 /root/.docker/config.json
인 경우 config.json
파일에는 다음과 같은 인증 항목이 있습니다.
{
"auths": {
"10.200.0.2": {
"auth": "<base64 encoded auth>"
}
}
}
레지스트리에 대한 인증 항목이 없는 경우 레지스트리에 로그인하여 config.json
파일을 업데이트합니다.
docker login <registry> -u <username> -p <password>
부트스트랩 클러스터 생성 오류
클러스터를 만드는 중에 다음과 같은 오류가 발생할 수 있습니다.
failed: error creating bootstrap cluster: failed to pull kind image kindest/node:v0.11.1-gke.7-v1.20.9-gke.101 from registry mirror(s)
부트스트랩 클러스터 생성 오류가 표시되면 모든 이미지가 비공개 레지스트리에 업로드되었는지 확인합니다.
actl images push --private-registry=<registry>
샘플 명령어는 다음과 같습니다.
actl images push --private-registry=10.200.0.2/library
실행 전 오류
Anthos 비공개 모드에서 관리자 클러스터를 만들 때 실행 전 오류, 클러스터 생성 중단으로 인한 클러스터 생성 실패를 해결하거나 일반적인 문제를 해결해야 합니다.
실행 전 오류로 클러스터 생성 실패
실행 전 검사가 실패하면 다음과 같은 오류 메시지가 표시될 수 있습니다.
unable to create cluster: unable to create cluster: preflight check failed
Anthos 비공개 모드는 actl-workspace/admin/log/preflight-<timestamp>/
디렉터리에서 해당하는 오류 로그를 수집합니다(예: actl-workspace/admin/log/preflight-20210907-205726/
).
이 문제를 해결하려면 다음을 확인하세요.
- 노드의 IP 주소로 이름이 지정된 파일의 각 실패한 노드 로그
node-network
파일의 네트워크 관련 로그
로그 데이터를 기반으로 머신 최소 요구사항이 충족되지 않거나 충돌하는 포트와 같은 명백한 오류가 있는지 확인합니다. 머신을 업데이트하고 다시 시도합니다.
클러스터 생성 중단
클러스터 만들기에 시간이 오래 걸리는 경우(예: 노드가 3개인 클러스터인 경우 30분 넘게 소요) 로컬 부트스트랩 클러스터에서 이미지 가져오기 오류가 있는지 확인합니다.
kubectl --kubeconfig actl-workspace/.kindkubeconfig get pods -A
포드가 ImagePullErr
상태인 경우 해당 이미지가 레지스트리에 업로드되었는지 확인합니다.
actl images push --private-registry=<registry>
샘플 명령어는 다음과 같습니다.
actl images push --private-registry=10.200.0.2/library
특정 클러스터 만들기 작업의 상태가 Error
이면 해당 포드의 로그를 확인합니다.
kubectl --kubeconfig actl-workspace/.kindkubeconfig get pods -n cluster-admin
kubectl --kubeconfig actl-workspace/.kindkubeconfig logs <pod-name> -n cluster-admin
로그를 검토하여 머신에서 수동으로 오류를 해결할 수 있는지 확인합니다. SSH를 사용하여 머신에 로그인하고 journalctl --no-pager -l
을 실행하여 머신 자체에서 추가 오류를 가져올 수 있습니다.
중요한 서비스가 작동하는지 확인하려면 다음 명령어를 실행합니다.
service containerd status
service kubelet status
journalctl -u containerd
journalctl -u kubelet
# If needed sudo systemctl restart <service> to fix issues.
# sudo service <service> restart
# e.g.,
# sudo service containerd restart
일반적인 문제
일반적으로 노드 문제를 해결하려면 SSH를 사용하여 노드에 연결하고 다음 명령어를 실행합니다.
journalctl --no-pager -l
로그에서 오류를 확인합니다.
클러스터 생성 실패
SSH를 사용하여 제어 영역 머신에 연결하고 클러스터의 포드를 확인합니다.
sudo kubectl --kubeconfig /etc/kubernetes/admin.conf get po -A
네트워크 문제
이 섹션에서는 Anthos 비공개 모드의 가장 일반적인 네트워크 관련 문제에 대한 설명과 문제를 해결하는 단계가 나와 있습니다.
- 각 노드 간의 연결을 보고 네트워크 관련 오류를 확인하려면
ip route
를 사용합니다. 제어 영역 VIP에 연결할 수 없는 경우 SSH를 사용하여 제어 영역 노드에 연결하고 다음을 실행합니다.
journalctl -u containerd --no-pager -l # Check the logs of those pods as well. sudo kubectl --kubeconfig /etc/kubernetes/admin.conf -n kube-system get po | grep -E "haproxy|keepalived" sudo crictl logs `sudo crictl ps | grep anthos-baremetal-haproxy | awk '{print $1}'` sudo crictl logs `sudo crictl ps | grep anthos-baremetal-keepalived | awk '{print $1}'`
이 문제는
keepalived
및haproxy
이미지가 비공개 레지스트리에 로드되지 않은 경우 발생할 수 있습니다.관리자 클러스터가 성공적으로 생성된 후에만 사용합니다. 서비스 IP에 연결할 수 없으면
metallb
Pod의 로그를 확인합니다.kubectl --kubeconfig ./actl-workspace/admin/admin-kubeconfig logs -l app=metallb -l component=controller -n kube-system kubectl --kubeconfig ./actl-workspace/admin/admin-kubeconfig logs -l app=metallb -l component=speaker -n kube-system
모든 포드가 컨테이너 생성에서 멈춘 경우 다음 중 하나를 수행합니다.
- anetd-연산자 배포 및 anetd daemonset 로그를 확인합니다.
kubectl --kubeconfig ./actl-workspace/admin/admin-kubeconfig get pods -l name=cilium-operator -n kube-system kubectl --kubeconfig ./actl-workspace/admin/admin-kubeconfig logs -l name=cilium-operator -n kube-system kubectl --kubeconfig ./actl-workspace/admin/admin-kubeconfig get pods -l k8s-app=cilium -n kube-system kubectl --kubeconfig ./actl-workspace/admin/admin-kubeconfig logs -l k8s-app=cilium -n kube-system
- 기본 게이트웨이가 정의되어 있지 않으면 anetd 연산자가 kube-api 서버에 도달하지 못할 수 있으므로 iptables가 제대로 작동하지 않을 수 있습니다.
ip route add default via <some-ip> iptables-save -t nat iptables-save -t filter
노드를 다시 시작하여 문제가 해결되었는지 확인합니다.
일반적인 실수
kubectl 명령어가 작동하지 않음
원격 Kubernetes API 서버에 연결하도록 kubectl 명령줄 도구를 구성하지 않은 경우 다음 오류 메시지가 표시됩니다.
$ kubectl ...
The connection to the server localhost:8080 was refused - did you specify the right host or port?
kubeconfig가 설정되어 있는지 확인합니다. 이렇게 하려면 KUBECONFIG 환경 변수를 설정하거나 --kubeconfig
플래그로 명령어를 실행하면 됩니다.
예를 들어 관리자 kubeconfig를 설정하려면 다음 중 하나를 수행합니다.
- 환경 변수를 관리자 kubeconfig로 설정합니다.
export KUBECONFIG=$HOME/anthos-baremetal-private-mode/actl-workspace/admin/admin-kubeconfig
- kubeconfig 명령줄 옵션을 사용합니다.
kubectl --kubeconfig=$HOME/anthos-baremetal-private-mode/actl-workspace/admin/admin-kubeconfig
자세한 내용은 kubeconfig 파일을 사용하여 클러스터 액세스 구성을 참조하세요.
사용자 클러스터 생성 실패
워크스테이션에서 관리자 클러스터에 액세스하고 사용자 클러스터 관련 포드를 보려면 다음 명령어를 사용합니다.
kubectl --kubeconfig ./actl-workspace/admin/admin-kubeconfig get po -n cluster-CLUSTER_NAME
CLUSTER_NAME
을 클러스터 이름으로 바꿉니다.
사용자 클러스터가 여전히 실패하면 사용자 클러스터를 삭제하고 다음 구성을 다시 적용합니다.
# Delete user cluster export ADMIN_KUBECONFIG=$(pwd)/actl-workspace/admin/admin-kubeconfig export USER_CLUSTER_NAME=user-1 kubectl -n cluster-${USER_CLUSTER_NAME} delete Cluster $USER_CLUSTER_NAME --kubeconfig=${ADMIN_KUBECONFIG} # Re-apply the user cluster YAML file KUBECONFIG=${ADMIN_KUBECONFIG} kubectl apply -f user.yaml # Wait until client config ready and stored in the path "$(pwd)/${USER_CLUSTER_NAME}-kubeconfig" export USER_KUBECONFIG=$(pwd)/${USER_CLUSTER_NAME}-kubeconfig waittime="5 minutes" endtime=$(date -ud "$waittime" +%s) while ! KUBECONFIG=${ADMIN_KUBECONFIG} actl clusters baremetal get-credentials -c "${USER_CLUSTER_NAME}" -o "${USER_KUBECONFIG}"; do if [[ $endtime -le $(date -u +%s) ]]; then echo "Client config not ready in $waittime, terminating" exit 1 fi echo "client config not ready, sleeping 30s" sleep 30 done # Check the user cluster status until all nodes are ready KUBECONFIG=${USER_KUBECONFIG} kubectl get nodes
Anthos 관리 센터 만들기
관리자 클러스터 리소스 부족
AdminOperator
커스텀 리소스는 Anthos 관리 센터 설치를 구성합니다. 컨트롤러가 관리 센터를 설치하는 데 문제가 있는지 확인하려면 이 커스텀 리소스 및 컨트롤러의 Google Kubernetes Engine 이벤트 및 로그를 확인하세요.
kubectl --kubeconfig ./actl-workspace/admin/admin-kubeconfig describe adminoperator admin-operator
kubectl --kubeconfig ./actl-workspace/admin/admin-kubeconfig logs -n anthos-management-center-operator -l control-plane=admin-operator
이미지 가져오기 오류
클러스터에서 포드를 시작하면 AdminOperator
가 성공을 보고하지 못하는 문제가 발생할 수 있습니다.
# Get all pods that aren't in a Running state or have succeeded.
kubectl --kubeconfig ./actl-workspace/admin/admin-kubeconfig get pods --field-selector=status.phase!=Running,status.phase!=Succeeded -A
# Examine the pods of interest that are failing...
kubectl --kubeconfig ./actl-workspace/admin/admin-kubeconfig describe pod --namespace [NAMESPACE] [POD_OF_INTEREST]
업그레이드
Anthos on bare metal
Anthos on bare metal 업그레이드 관련 문제 해결에 대한 자세한 내용은 Anthos on bare metal에서 실패한 업그레이드 복구를 참조하세요.
Anthos 관리 센터
설치된 구성요소 버전을 확인하려면 다음을 사용하세요.
kubectl --kubeconfig ./actl-workspace/admin/admin-kubeconfig get adminoperator admin-operator -o yaml
다음은 출력의 예시입니다.
apiVersion: managementcenter.anthos.cloud.google.com/v1
kind: AdminOperator
spec:
updateConfigOverride:
policies:
- name: anthos-config-management
versionConstraint: <=1.8.0-gke.0
status:
components:
- name: anthos-bare-metal
version: 1.8.0-gke.0
versionConstraint: <=1.8.0-gke.0
- name: anthos-config-management
version: 1.8.0-gke.0
versionConstraint: <=1.8.0-gke.0
- name: anthos-service-mesh
version: 1.8.0-gke.0
versionConstraint: <=1.8.0-gke.0
version: 1.8.0-gke.0
배포된 Anthos 비공개 모드 환경에서 AdminOperator
객체의 status.version
은 Anthos 비공개 모드 출시 버전을 나타냅니다.
예를 들면, 1.8.0-gke.0
입니다. status.components
는 각 구성요소의 버전 상태를 보여줍니다. 여기에는 배포된 각 구성요소의 관찰된 버전과 버전 제약조건이 나열됩니다.
status.version
과 status.components
를 항상 사용할 수 있어야 합니다. 그렇지 않으면 설치가 손상됩니다.
spec.updateConfigOverride
는 선택사항입니다. 인프라 운영자가 필드를 수동으로 설정하여 특정 구성요소를 업그레이드하는 경우에만 존재합니다. 필드가 생략되면 모든 구성요소가 AdminOperator
와 동일한 버전에서 실행됩니다.
업데이트 센터의 패키지 확인
업데이트 센터에서 제공되는 패키지만 관리 센터에 배포됩니다.
예를 들어 1.8.0-gke.0
출시 버전으로 관리자 클러스터를 설치하고 나중에 1.8.1-gke.0
으로 업그레이드하면 업데이트 센터에 2개의 패키지 세트가 포함됩니다. 활발히 사용되는 구성요소의 UpdateItem
리소스를 삭제하면 Anthos 비공개 모드 설치가 손상될 수 있습니다.
kubectl --kubeconfig ./actl-workspace/admin/admin-kubeconfig get updateitems -n anthos-management-center
다음은 출력의 예시입니다.
NAME AGE
anthos-config-management-1.8.0-gke.0 13d
anthos-service-mesh-1.8.0-gke.0 13d