안녕하세요, 쯀리입니다.
저번에 Udemy에서 풀어주는 Quiz들의 풀이를 공유해보았는데
오늘은 Service와 Imperative Command 에 대해 알아볼게요
https://funlife-julie.tistory.com/38
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/
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