실습
Generic
Secret 생성
kubectl create secret generic db-credential \ --from-literal=DB_PASSWORD=Asdf'!'234
생성된 Secret 확인
kubectl get secret db-credential -o yaml
생성된 Secret 데이터의 평문 확인
kubectl get secret db-credential -o jsonpath={.data.DB_PASSWORD} | base64 -d && echo
생성된 Secret 삭제
kubectl delete secret db-credential
Secret 생성
cat <<'EOF' | kubectl apply -f - apiVersion: v1 kind: Secret metadata: name: db-credential type: Opaque data: DB_PASSWORD: Asdf!234 EOF
Secret 으로 사용할 문자열을 Base64로 인코딩
echo -n 'Asdf!234' | base64
Secret 생성
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Secret metadata: name: db-credential type: Opaque data: DB_PASSWORD: $(echo -n 'Asdf!234' | base64) EOF
생성된 Secret 데이터의 평문 확인
kubectl get secret db-credential -o jsonpath={.data.DB_PASSWORD} | base64 -d && echo
Pod 생성
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Pod metadata: name: alpine spec: containers: - image: alpine name: alpine command: [ "env" ] env: - name: DB_CREDENTIAL valueFrom: secretKeyRef: name: db-credential key: DB_PASSWORD restartPolicy: Never EOF
Pod 로그 확인
kubectl logs alpine
Pod 생성
cat <<EOF | kubectl replace --force -f - apiVersion: v1 kind: Pod metadata: name: alpine spec: containers: - image: alpine name: alpine command: [ "sleep", "3600" ] volumeMounts: - name: secret mountPath: "/etc/secret" readOnly: true volumes: - name: secret secret: secretName: db-credential items: - key: DB_PASSWORD path: db.properties EOF
Secret을 마운트한 경로에 있는 파일 확인
kubectl exec alpine -- ls -al /etc/secret
파일 내용 확인
kubectl exec alpine -- cat /etc/secret/db.properties && echo
파일 권한 확인
kubectl exec alpine -- ls -alL /etc/secret
Pod 재생성
cat <<EOF | kubectl replace --force -f - apiVersion: v1 kind: Pod metadata: name: alpine spec: containers: - image: alpine name: alpine command: [ "sleep", "3600" ] volumeMounts: - name: secret mountPath: "/etc/secret" readOnly: true volumes: - name: secret secret: secretName: db-credential defaultMode: 0400 EOF
Secret을 마운트한 경로에 있는 파일 확인
kubectl exec alpine -- ls -al /etc/secret
파일 내용 확인
kubectl exec alpine -- cat /etc/secret/DB_PASSWORD && echo
파일 권한 확인
kubectl exec alpine -- ls -alL /etc/secret
Secret 수정
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Secret metadata: name: db-credential type: Opaque data: DB_PASSWORD: bmV3cGFzc3dvcmQ= DB_NAME: bmV3ZGF0YWJhc2U= EOF
Secret을 마운트한 경로에 있는 파일 확인
kubectl exec alpine -- ls -al /etc/secret
파일 내용 확인
kubectl exec alpine -- cat /etc/secret/DB_PASSWORD && echo
생성한 리소스 삭제
{ kubectl delete pod alpine kubectl delete secret db-credential }
Container Registry
Pod 생성
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - image: youngwjungtest/nginx name: nginx EOF
생성된 Pod 확인
kubectl get pod nginx
Pod에 발생한 Event 확인
kubectl describe pod nginx
Pod가 배포된 Node 확인
kubectl get pod nginx -o wide
Pod가 배포된 노드의 인스턴스 아이디 확인
kubectl get node $(kubectl get pod nginx -o=jsonpath='{.spec.nodeName}') \ -o jsonpath='{.spec.providerID}{"\n"}' | grep -E "i-[a-z0-9]+"
새로운 터미널을 열고 Pod가 배포된 Node로 Session Manager 연결
aws ssm start-session --target \ $(kubectl get node $(kubectl get pod nginx -o=jsonpath='{.spec.nodeName}') \ -o jsonpath='{.spec.providerID}{"\n"}' | grep -oE "i-[a-z0-9]+")
Docker Hub 자격증명 설정
echo "dckr_pat_njVpXiQla1Soj0rbGP0PIvF2mbc" \ | sudo docker login -u youngwjungtest --password-stdin
Docker 자격증명 파일을 복사
sudo cp /root/.docker/config.json /var/lib/kubelet/
Kubelet 재시작
{ sudo systemctl restart kubelet sudo systemctl status kubelet }
기존 터미널로 이동해서 Pod 상태 확인
kubectl get pod nginx
다른 터미널로 이동해서 Docker 자격증명 파일을 삭제
sudo rm /var/lib/kubelet/config.json
Kubelet 재시작
{ sudo systemctl restart kubelet sudo systemctl status kubelet }
기존 터미널로 이동해서 Pod 삭제
kubectl delete pod nginx
Secret 생성
kubectl create secret docker-registry my-docker \ --docker-username=youngwjungtest \ --docker-password=dckr_pat_njVpXiQla1Soj0rbGP0PIvF2mbc
Deployment 생성
cat <<EOF | kubectl apply -f - apiVersion: apps/v1 kind: Deployment metadata: labels: app: nginx name: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - image: youngwjungtest/nginx name: nginx imagePullSecrets: - name: my-docker EOF
Pod 상태 확인
kubectl get pod -o wide -l app=nginx
컨테이너가 정상적으로 구동중인지 확인
kubectl exec deploy/nginx -- curl -s localhost
생성한 리소스 삭제
{ kubectl delete deploy nginx kubectl delete secret my-docker }
Last updated