본문 바로가기
카테고리 없음

[CKA] KodeKloud - CoreConcept Service와 Imperative Command

by 쯀리♥️ 2024. 5. 29.

안녕하세요, 쯀리입니다.

저번에 Udemy에서 풀어주는 Quiz들의 풀이를 공유해보았는데
오늘은 Service와 Imperative Command 에 대해 알아볼게요

https://funlife-julie.tistory.com/38

 

[CKA] KodeKloud - CoreConcept PODs와 ReplicaSets

안녕하세요, 쯀리입니다.Udemy에서 풀어보는 Quiz들을 답과 함께 풀어볼건데, 같이 가실까요?https://beta.kodekloud.com/user/courses/udemy-labs-certified-kubernetes-administrator-with-practice-tests Sign In | KodeKloudWelcome to

funlife-julie.tistory.com

 

https://beta.kodekloud.com/user/courses/udemy-labs-certified-kubernetes-administrator-with-practice-tests

 

Sign In | KodeKloud

Welcome to KodeKloud By signing up you agree to our privacy policy

identity.kodekloud.com

 


 

Service

1. How many Services exist on the system? In the current(default) namespace.

kubectl get service

kubectl get svc

 

2. What is the type of the default kubernetes service?
      위에서 확인했을때 TYPE 은 ClusterIP로 보여지네요

3. What is the targetPort configured on the kubernetes service?

kubectl describe service/svc <서비스명>

해당 service의 targetPort는 6443임을 확인할 수 있습니다. 

 

4. How many labels are configured on the kubernetes service?
component=apiserver
provider=kubernetes
총 2개의 Labels들로 이루어져있습니다. 

5.  How many Endpoints are attached on the kubernetes service?
Endpoints: 192.35.53.3:6443 으로 1개의 Endpoint가 적혀있네요.

6. How many Deployments exist on the system now?
In the current(default) namespace

kubectl get deployment
kubectl get deploy

simple-webapp-deployment 1개의 deployment가 있습니다. 

 

7. What is the image used to create the pods in the deployment?

kubectl describe deployment simple-webapp-deployment

이미지는 kodekloud/simple-webapp:red 이군요!

8. Create a new service to access the web application using the service-definition-1.yaml file.

Name: webapp-service
Type: NodePort
targetPort: 8080
port: 8080
nodePort: 30080
selector:
  name: simple-webapp

Service-definition-1.yaml 파일을 수정해줍니다. 

---
apiVersion: v1
kind: Service
metadata:
  name: webapp-service
  namespace: default
spec:
  ports:
  - nodePort: 30080
    port: 8080
    targetPort: 8080
  selector:
    name: simple-webapp
  type: NodePort

정상적으로 생성이 되었는지 확인해볼게요

kubectl apply -f service-definition-1.yaml
kubectl get svc

 

앞전에는 접근할수 없었던 simple-web-ui는 왜 이제 접근이 가능할까요?
이유는 8080으로 포트포워딩 되어있지 않았던 서비스가 web-app-service가 30080번 외부포트로 접근할수 있기  때문입니다. 
이때 필요한게 NodePort에요.

https://kubernetes.io/ko/docs/concepts/services-networking/service/

 

서비스

외부와 접하는 단일 엔드포인트 뒤에 있는 클러스터에서 실행되는 애플리케이션을 노출시키며, 이는 워크로드가 여러 백엔드로 나뉘어 있는 경우에도 가능하다.

kubernetes.io

 

 


Imperative Command

Imperative : 방향을 step-by-step으로 알려주는 방법
- 컴퓨터가 어떻게 동작하는지에 초점을 맞춤
- Kubernetes에서 Imperative 방법은 직접 명령어를 쳐서 동작시키는 것

Declarative: 위치를 지정해주면 알아서 가게끔 해주는 방법
- 프로그램이 실제로 어떻게 흘러가는지 상관없이 프로그램의 논리에 초점을 맞춤
- 약속된 정의만 사용해서 작성
- Kubernetes에서 Declarative은 YAML파일을 사용해서 동작을 시키는 것

1. Deploy a pod named nginx-pod using the nginx:alpine image.

kubectl run nginx-pod --image=nginx:alpine

 

2. Deploy a redis pod using the redis:alpine image with the labels set to tier=db.

Either use imperative commands to create the pod with the labels. Or else use imperative commands to generate the pod definition file, then add the labels before creating the pod using the file.

kubectl run redis --image=redis:alpine -l tier=db

-l : label을 뜻합니다.

 

3. Create a service redis-service to expose the redis application within the cluster on port 6379.

Service: redis-service
Port: 6379
Type: ClusterIP

redis pod를 포트 6379로 노출하는 서비스를 만들라는 뜻.
kubectl expose --help를 커멘드 창에 쳐보면 이런 명령어가 나옵니다.

# Create a service for a pod valid-pod, which serves on port 444 with the name "frontend"
  kubectl expose pod valid-pod --port=444 --name=frontend

# 적용
  kubectl expose pod redis --port=6379 --name=redis-service --cluster-ip=''

 

4. Create a deployment named webapp using the image kodekloud/webapp-color with 3 replicas.

##kubectl create deployment --help
kubectl create deployment NAME --image=image -- [COMMAND] [args...] [options]

## 적용
kubectl create deployment webapp --image=kodekloud/webapp-color --replicas=3


5. Create a new pod called custom-nginx using the nginx image and run it on container port 8080.

kubectl run custom-nginx --image=nginx --port=8080

6. Create a new namespace called dev-ns.

kubectl create ns dev-ns
kubectl create namespace dev-ns


7. Create a new deployment called redis-deploy in the dev-ns namespace with the redis image. It should have 2 replicas.

## -n=<namespace명> : namespace 지정해주는 명령어

kubectl create deployment redis-deploy -n=dev-ns --image=redis --replicas=2


8. Create a pod called httpd using the image httpd:alpine in the default namespace.
Next, create a service of type
 ClusterIP by the same name (httpd). The target port for the service should be 80.
Try to do this with as few steps as possible.

kubectl run httpd --image=httpd:alpine --port=80 --expose

오늘 K8s의 Service와 Imperative Command에 관해 알아보았습니다. 

다음은 2강으로 넘어가서 Scheduling부분을 같이 알아볼게요!

 


참조

Udemy Labs - Certified Kubernetes Administrator with Practice Tests