728x90
클러스터 구축 중 katib 의 mysql 파드가 정상적으로 생성되지 않는 문제가 발생했습니다.
발생 에러
발생한 에러는 no basic auth credential 에러입니다.
현재 환경에서는 Nexus Repository 를 구성해 운영하고 그곳에서 이미지를 pull 하게 됩니다.
그런데 아래 이벤트를 확인하시면 image registry에 접근할 수 없다는 에러를 확인할 수 있습니다.
Events: │
│ Type Reason Age From Message │
│ ---- ------ ---- ---- ------- │
│ Warning FailedScheduling 11m default-scheduler 0/3 nodes are available: 3 pod h │
│ as unbound immediate PersistentVolumeClaims. │
│ Warning FailedScheduling 11m default-scheduler 0/3 nodes are available: 3 pod h │
│ as unbound immediate PersistentVolumeClaims. │
│ Normal Scheduled 11m default-scheduler Successfully assigned kubeflow/k │
│ atib-mysql-5fbcfd878c-8gc7m to 66-140-w1-dev │
│ Normal SuccessfulAttachVolume 11m attachdetach-controller AttachVolume.Attach succeeded fo │
│ r volume "pvc-d8c5593a-9caf-4bb3-b245-8f8ed01aa3e7" │
│ Warning Failed 10m (x6 over 11m) kubelet Error: ImagePullBackOff │
│ Normal Pulling 9m58s (x4 over 11m) kubelet Pulling image "192.168.4.65:5000 │
│ /kubeflowkatib/mysql:seaweed.v1.1" │
│ Warning Failed 9m58s (x4 over 11m) kubelet Failed to pull image "192.168.4. │
│ 65:5000/kubeflowkatib/mysql:seaweed.v1.1": rpc error: code = Unknown desc = Error response from daemon: Head "http:/ │
│ /192.168.4.65:5000/v2/kubeflowkatib/mysql/manifests/seaweed.v1.1": no basic auth credentials │
│ Warning Failed 9m58s (x4 over 11m) kubelet Error: ErrImagePull │
│ Normal BackOff 78s (x44 over 11m) kubelet Back-off pulling image "192.168. │
│ 4.65:5000/kubeflowkatib/mysql:seaweedv1.1"
권한 검증
정말 권한이 없는지 검증을 해보겠습니다.
먼저 docker 에 로그인을 수행해봅니다.
docker login
저는 ~/.docker/config.js 파일을 이용하고 있는데, 로그인 수행 시 인증 키가 등록됩니다.
vi ~/.docker/config.js
{
"auths": {
"192.168.4.65:5000": {
"auth": "YourAuthCode=="
}
}
}
~
해당 파일을 이용해 docker 에 로그인을 수행해봅니다.
[root@66-140-m-dev bin]# docker login 192.168.4.65:5000
Authenticating with existing credentials...
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
아래 명령어를 통해서 접속 정보 확인도 가능합니다.
check secret
[root@66-140-m-dev .docker]# kubectl get secret docker-login --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode
{
"auths": {
"192.168.4.65:5000": {
"auth": "YourAuthCode=="
}
}
pull image
이번엔 docker pull 명령어를 이용해 직접 이미지를 당겨 확인해보겠습니다.
[root@66-140-m-dev ~]# docker pull 192.168.4.65:5000/kubeflowkatib/mysql:seaweed.v1.1
seaweeda.v1.1: Pulling from kubeflowkatib/mysql
Digest: sha256:44f98f4dd825a945d2a6a4b7b2f14127b5d07c5aaa07d9d232c2b58936fb76dc
Status: Image is up to date for 192.168.4.65:5000/kubeflowkatib/mysql:seaweed.v1.1
192.168.4.65:5000/kubeflowkatib/mysql:seaweed.v1.1
pull 이 정상적으로 이루어지는 것을 확인할 수 있습니다.
yaml 확인
secret 과 image 에 문제가 없다면 yaml 파일을 확인해야겠습니다.
결과적으로 저의 경우는 yaml 파일에 쿠버네티스에서 도커 레지스트리에 접근하기 위한 secret 이 빠져 발생하는 에러였습니다.
해서 image pull 을 위한 secret 을 추가해주었습니다.
imagePullSecrets:
- name: docker-login
spec 하위에 추가된 것을 확인하실 수 있습니다.
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
katib.kubeflow.org/component: mysql
name: katib-mysql
namespace: kubeflow
spec:
replicas: 1
selector:
matchLabels:
katib.kubeflow.org/component: mysql
strategy:
type: Recreate
template:
metadata:
annotations:
sidecar.istio.io/inject: "false"
labels:
katib.kubeflow.org/component: mysql
spec:
imagePullSecrets: # 추가
- name: docker-login # 추가
containers:
- args:
- --datadir
- /var/lib/mysql/datadir
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
key: MYSQL_ROOT_PASSWORD
name: katib-mysql-secrets
- name: MYSQL_ALLOW_EMPTY_PASSWORD
value: "true"
- name: MYSQL_DATABASE
value: katib
image: {{repository.address}}/kubeflowkatib/mysql:seaweed.v1.1
secret 추가 후 파드가 정상적으로 생성되었습니다.
추가로 혹시나 시크릿 생성 테스트를 해보고싶으신 분들은 아래와 같이 진행하시면 됩니다.
# create secret
[root@66-140-m-dev .docker]# kubectl create secret generic regcred \
> --from-file=.dockerconfigjson=/root/.docker/config.json \
> --type=kubernetes.io/dockerconfigjson
secret/regcred created
# get secret info
[root@66-140-m-dev .docker]# kubectl get secret testsecret --output=yaml
apiVersion: v1
data:
.dockerconfigjson: ewoJImF1dGhzIjogewTIuMTY4LjQuNjU6NTAwMCI6IHsSdGFXNDZNKCQl9Cgl9Cn0=
kind: Secret
metadata:
creationTimestamp: "2023-10-27T04:25:50Z"
name: regcred
namespace: default
resourceVersion: "21121"
uid: 0fbc006d-e6a3-42fa-9ffe-21504625d
type: kubernetes.io/dockerconfigjson
728x90
'개발' 카테고리의 다른 글
[Git] Git Add/Commit 되돌리기, 수정하기 (0) | 2024.02.06 |
---|---|
[Windows] Windows CURL 사용법 (0) | 2024.02.05 |
[K8S] 쿠버네티스 파드 미생성 (0) | 2024.02.05 |
[Linux] 디렉토리 삭제 불가 : cannot remove device or resource busy (1) | 2024.01.09 |
[Git] Git 초기 설정 (0) | 2024.01.09 |