Kubernetes Python 클라이언트를 사용해 yaml 파일로부터 pod를 생성해보자


환경

  • Kubernetes
  • 기본 설정들이 ~/.kube/config file에 되어있다고 가정


사용법

예시 YAML 파일

  • 이 글에서 파일명은 nginx_deployment.yaml다.
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2 # tells deployment to run 2 pods matching the template
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

코드

  • 기본 설정들이 ~/.kube/config file에 되어있다고 가정
import time
from kubernetes import client as kubernetes_client
from kubernetes import utils
from kubernetes import config
import yaml


# read yaml file as object
with open("nginx_deployment.yaml") as f:
    nginx_deployment_yaml = yaml.safe_load(f)

# load default config
# assume that default setting is set in ~/.kube/config
config.load_kube_config()

# load kubernetes client
k8s_client = kubernetes_client.api_client.ApiClient()

# create pods from yaml object
utils.create_from_yaml(k8s_client, yaml_objects=[
                       nginx_deployment_yaml], namespace="default")

# wait for pods
time.sleep(3)

# list pods
core_v1_api = kubernetes_client.CoreV1Api()
pods = core_v1_api.list_namespaced_pod("default")
for pod in pods.items:
    print(f"{pod.metadata.name} {pod.status.phase} {pod.status.pod_ip} {pod.metadata.namespace}")

실행 결과

$ python test.py
nginx-deployment-7fb96c846b-bgvkv Running 172.17.0.3 default
nginx-deployment-7fb96c846b-g9l6l Running 172.17.0.4 default
$ kubectl get pods -n default
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-7fb96c846b-bgvkv   1/1     Running   0          20s
nginx-deployment-7fb96c846b-g9l6l   1/1     Running   0          20s


참고자료

Make pod from yaml file using Kubernetes Python client


Environment and Prerequisite

  • Kubernetes
  • Assume default setting is set in ~/.kube/config file


Usage

Example YAML File

  • File name is nginx_deployment.yaml in this post.
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2 # tells deployment to run 2 pods matching the template
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

Code

  • Assume default setting is set in ~/.kube/config file
import time
from kubernetes import client as kubernetes_client
from kubernetes import utils
from kubernetes import config
import yaml


# read yaml file as object
with open("nginx_deployment.yaml") as f:
    nginx_deployment_yaml = yaml.safe_load(f)

# load default config
# assume that default setting is set in ~/.kube/config
config.load_kube_config()

# load kubernetes client
k8s_client = kubernetes_client.api_client.ApiClient()

# create pods from yaml object
utils.create_from_yaml(k8s_client, yaml_objects=[
                       nginx_deployment_yaml], namespace="default")

# wait for pods
time.sleep(3)

# list pods
core_v1_api = kubernetes_client.CoreV1Api()
pods = core_v1_api.list_namespaced_pod("default")
for pod in pods.items:
    print(f"{pod.metadata.name} {pod.status.phase} {pod.status.pod_ip} {pod.metadata.namespace}")

Execution Results

$ python test.py
nginx-deployment-7fb96c846b-bgvkv Running 172.17.0.3 default
nginx-deployment-7fb96c846b-g9l6l Running 172.17.0.4 default
$ kubectl get pods -n default
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-7fb96c846b-bgvkv   1/1     Running   0          20s
nginx-deployment-7fb96c846b-g9l6l   1/1     Running   0          20s


Reference

작년을 간단하게 회고하자!


배경

매년 작성했던 부분들이기도 했고 몇 가지 적고 싶은 부분들이 있어서 회고를 작성하려 한다. 관련하여 매년 작성하던 회고들은 아래 링크에 첨부한다.

사실 작년 [회고] 컴퓨터 과학과 공학 10년 차 전공자로서의 회고에 작성했던 회고가 굉장히 길어서 쓰는데 3일이 넘게 걸렸었다. 30살이 된 기념으로 썼던 거라 내용이 좀 길었었는데 이번에는 직장과 전공에 대한 부분의 회고 그리고 짧게 삶에 대한 회고를 쓰려고 한다.


작년은 어땠나?

작년은 회사 일도 마음에 들었고 성과도 있었고 발표도 하고 블로그도 하고 만족스럽게 했던 거 같다. 작년에는 불안감과 회의가 있었지만, 작년에는 재작년보다 열정적으로 일하고 공부할 수 있었던 거 같다. 이유는 무엇이었을까? 정리해보면 아래와 같다.

회사에 기여하는 업무

이전에 있던 곳에서의 업무는 선행개발이라 단발성이거나 지속적이지 않은 경우였다. 하지만 재작년부터 작년까지의 경우에는 회사에 지속해 기여할 수 있는 부분이었고 앞으로의 미래에 꼭 필요한 부분이었다. 데이터가 필요 없는 곳은 없으며 이 데이터를 통해 회사가 새로운 일들과 인사이트를 얻을 수 있을 거로 보여 꼭 필요한 부분이라 생각한다.

최신 트렌드의 업무

빅데이터를 담당하는 부서에서 데이터 수집에 대한 부분을 맡았었는데 관련 부분의 경우 요즘의 트렌드이며 많은 관심이 있는 부분이기도 하다. 관련하여 외부 클라우드 회사들에서도 여러 기술들을 내놓고 있으며 논문도 많이 나오고 있는 거로 보인다.

어려운 부분들을 해결해 나가는 과정을 겪음

앞서 설명한 회사의 일들을 하면서 여러 회사 서비스와의 소통이나 서비스 연동을 하면서 겪었던 문제들을 같이 해결해나가는 과정이 있었고 보람 있었다. 데이터 연동 업무를 맡았었는데 데이터 제공자들의 요구사항을 만족하는 솔루션을 고민하고 해결하는 과정이 있었다.

꾸준하게 작성한 블로그

비록 매년 내용과 포스트의 수가 줄어들었지만 목표했던 꾸준하게 작성하는 습관은 잘 지킨거 같다. 아직도 써야 할 글들이 많지만 하나하나 써가고 있다. 방문자가 줄고 있는 부분이 마음 아프지만 이제는 방문자에 연연해 하지 않는다. 꾸준하게 글을 쓰는 부분이 동일하게 올해 목표다.

성장한 부분이 느껴짐

매년 성장을 했었지만 입사했을때와 지금이 가장 많은 성장을 한거 같다. 작년의 경우 개발 방법 프로세스와 같은 부분에 있어서 스프린트를 제대로 했고 이벤트 스토밍과 같은 활동도 진행했었다. 개발에 있어서는 AWS나 GCP와 같은 클라우드에 있는 데이터들을 어떻게 수집할지 고민하면서 많은 공부를 했었다. 클라우드 서비스들과 인증 관련된 부분들을 많이 공부한거 같다. 인증의 경우 AWS의 IAM 유저와 Role GCP의 경우 Service Account에 대해서 알았다. AWS의 각 Database별 수집 방법을 조사했었다. 이외에 Airflow나 Dataflow 그리고 VPC Enpoint 같은 부분들도 옆에서 보았다. 아쉬운 부분은… 서버 백엔드나 코드 관련한 부분을 더 자세하게 하지 못한 부분이 아쉽다.

마음속 버킷리스트였던 회사에서의 발표

어려서부터 회사의 이름을 걸고 외부에서 발표를 하는게 꿈이었다. 정확하게는 CES나 MWC에서 내가 만든 제품을 발표하는게 꿈이었다. 작년에 비슷하게나마 꿈을 이룰 수 있었다. 감사하게도 운이 좋아 SSDC(Samsung Software Developer Conference)라는 회사의 작은 소프트웨어 관련 행사에 참여하여 발표를 할 수 있었다. 업무 목표를 달성한거 등등 다른 여러가지 부분도 있었지만 기억나는 보람찬 일중에 하나다. 별거 아닌 일이지만 목표하던 꿈에 다가간거 같았다.

위에 정리한대로 작년은 만족스럽게 보낸거 같았다. 작년에 수의학을 공부하고 싶다는 내용이 있었는데 그 부분은 사실 아직도 유효하다. 열심히 능력을 키워서 어딘가에 도움을 주고 싶고 현재는 여전히 동물들에게 어떻게 하면 도움이 될 수 있을까 생각을 하면서 지낸다. 그에 대한 방법으로 돈을 많이 벌어서 지원해주는 방식을 선택했지만… 아직 해야할게 너무도 많다. 여전히 마음속에 여러가지 목표가 있는거 같다. 내 가족과 부모님을 부족함 없이 충분히 지원해줄 수 있는 능력, 기회조차 갖지 못할 정도로 힘든 사람들을 도와주기, 동물들 도와주기, 나쁜 사람들을 잡는데 도움이 될 수 있는거 만들기 등등 여전히 업무적으로 목표가 많다. 이러한 목표들을 제외하고 사실 삶 자체에도 중요한 여러 목표들이 있는데 그런 부분들은 일기에 적어야겠다!

그런 내용의 글을 쓰다보니 아쉬운 점은 없었을까? 그런 아쉬운 점과 함께 내년에는 어떻게 하면 더 좋은 내가 될 수 있을지 정리를 아래에 해봐야겠다.


아쉬웠고 개선할 부분

개발시 코드에 대해 더 집중하면 좋겠다.

올해는 구현보다도 코드를 더 잘 작성하도록 해보겠다.

집중을 더 하면 좋겠다.

어떠한 일을 할때 집중력이 많이 떨어진거 같아서 하나만 제대로 하는 방향으로 습관을 다시 들여야겠다.

자기 개발을 할 때 더 집중하면 좋겠다.

특히 집에서 공부하거나 하면 금방 집중력이 사라지는데 이것도 집중해서 해야할 일을 더 빨리 끝내야겠다.

간단하더라도 작품이 있으면 좋겠다.

올해 회사말고 혼자서 서비스 개발이나 게임 공부 그리고 데이터 분석을 공부했지만 작품을 만든게 없었다. 그런 부분이 아쉬워서 내년에는 작품 하나를 만들고 싶다. 현재의 추세라면… 게임이나 서비스가 될거 같다.


인생에 관해서

이번에는 사실 내 전공이나 일에 관해서는 간략하게 썼다. 사실 깊게 쓸 필요가 없는게 지금에서 조금만 더 개선하면 될거 같아서 그렇다. 회사는 올해와 비슷한 업무를 할거 같고 혼자 진행하는 일들(개발 공부, 주식, 경제, 블로그, 게임 개발 등등)도 작년과 비슷할거 같다.

어렸을때 30살이면 많은걸 이룰줄 알았는데 어디까지 왔는지 잘 왔는지 모르겠다. 어렸을때 그리고 자라면서 많은 목표가 있었던 거 같다. 위인전을 많이 읽어서 그런가 힘들게 버티고 발전해온 우리나라를 지키고 발전시키고 싶기도 했고 착한분들이 나쁜놈들한테 피해보는걸 보면서 어떻게 하면 저런 사람들이 세상에 없을 수 있을까와 같은 생각을 했고 어려운 사람들을 보면 돕고 싶기도 했고 세상에 기여하고 싶기도 했다. 아 물론! 지금도 동일하다. 나중에 아주 많은 시간후에 내가 죽기전에 내 삶이 “괜찮았다.”라고 생각하면서 앞선 목표들중 하나라도 이룬 모습을 가끔 꿈꾼다. 앞서 이야기했던대로 사람의 손길이 비교적 적은 동물들을 요새는 돕고싶다.

앞선 목표들도 중요하지만 내 삶에서 가장 중요한건 내 행복이다. 내 행복의 많은 부분은 가족과 사람들이라고 이전에도 적었었다. 앞선 어떤 목표들보다도 내 가족이 중요하다. 내 삶에만 집중하고 성공만을 바라보면서 열심히 살다가 강아지 동생을 못 챙겼던 부분이 있었고 가족과 더 많은 시간을 보냈었으면 하는 후회가 있다. 그 이후부터는 가족을 중요시하고 가족과 1분이라도 더 많이 보내려고 노력한다. 남은 시간이라도 내 가족을 잘 챙기고 더 많은 시간을 보내고 싶다. 어떤 일도 나와 내 가족보다 우선시 될 수 없는거 같다.

올해는 이제 기존 가족과 독립하고 새로운 가족이 생긴다. 새로운 가정을 만들고 사는 나와 내 가족의 미래 모습이 기대된다! 가장이 되는게 걱정도 있지만 지금까지 살아온것처럼 앞으로도 잘 될거라 믿는다. 새로운 가족도 잘 챙기면서 부모님과 동생도 잘 챙기는게 가장 우선 목표이다. 말했지만 가족이 가장 중요하니까! 내 가장 소중하고 중요한건 가족이다!


마무리

내년에는 어떤 모습으로 글을 쓰고 있을지 궁금하다! 지금까지 해왔던것처럼 꾸준하게 열심히 살자! 감사하면서 겸손한 마음으로 열심히!

Let’s briefly look back on last year!


Background

I write this retrospective because I wrote it every year and there were some things that I’d like to write. Here are past retrospectives.

It took more than 3 days to write [Retrospective](EN) Retrospective of a tenth-year major in computer science and engineering post. It was a long post because it was to commemorate my 30 years old. However this time I’m going to write a retrospective of my job, major, and my life in short.


How was last year?

Last year was quite good for me because I made a good performance on my work, did a presentation, and wrote a blog. I had anxiety and a sense of skepticism the year before last but I could study more and concentrate more on my work last year. What are the reasons? Those are like the below.

Work that contributes to the company

My previous workplace’s works were only for once and not continuous because all those works are advanced development. However, from the year before last to last year, it was a part that could contribute to the company and was essential for the future. There is no company where data is not needed and I think it is necessary because it seems that the company can get new insights through data.

I took a data collection part in the company’s big data department and it is a trend these days. Many public cloud companies are also presenting various technologies and seem to be publishing a lot of papers.

Going through solving difficulties

There were difficulties when integrating other services. While doing that our team solved many difficulties. There were some events solving requirements from the data source owner. Those works were quite worthwhile to me.

Writing blog steadily

Although the number of new posts decreased compared to the year before last. I kept writing my blog. Still, many things are left to write but I’m trying to write them. Visitors are decreasing but I don’t care about it much. I’m going to write the blog this year same as last year.

I feel like growing up

I grow up every year but I think last year was the most. Last year we tried sprint planning and event storming activity. In development, I studied a lot while thinking about how to collect data in the cloud such as AWS or GCP. Especially I studied more about cloud services and authentication. I learned about AWS IAM user and role and GCP service account. I searched each database’s fetch solution in AWS. Also, I tried Airflow, Dataflow, and VPC Endpoint related things. A little sad thing is… it was regrettable that I could not more focus on the server backend or code related parts.

Presentation which was my bucket list

It has been a dream that makes a presentation at our company event since I was young. Technically my dream is to present the products that I made at CES or MWC. Thankfully I was lucky that I could make a presentation at SSDC(Samsung Software Developer Conference) which is a small software event in our company. There were many other things like achieving my work goals but it is one of the most rewarding things last year. It’s not a big thing but I felt like I approached one step toward my dream.

As I wrote above, last year was good for me. Last year I thought about studying veterinary medicine and that part still remains in my mind. I’d like to work hard to develop my abilities and help somewhere. I still think about the way to help animals. I choose to make a lot of money and support them but… still, many things are left to do. I think I still have many goals in my mind. Ability to fully support my family and parents, help people who don’t even have a chance, help animals, and make something that can help catch bad people, and still, there are many goals. Except for these goals, there are actually many important things in life. I will write those things in my diary!

Were there any regrets? With that regret, I will organize the regrets and how I can become better than before.


Regrets and improvements

Focus more on code

This year I’m going to more focus on writing good codes than just implementing codes.

Concentrate more

I think I sometimes lost concentration when I do something. So I should make a habit to make better concentration.

Concentrate more when doing self-development

Especially when I study or do other things at home, my concentration disappears quickly. So I should focus on what I have to do and finish it faster.

It is good to have my product

I studied hard but I made no product last year. I’d like to make my product and release it this year. It can be a game or service.


About life

This time I wrote short than last year. It is because I don’t need to write long. I think company works and self developments(software, stock, economy, blog, game development, etc) will be similar to last year.

When I was young, I thought 30 years of me would achieve many things but I cannot sure how many things I achieved. I think I had many goals when I was young and growing up. Maybe because I read a lot of great personal biography I’d like to protect and develop our country which has been struggling and developed in difficult circumstances, I’d like to help good people who suffered from bad people and I’d like to help and contribute to the world. Of course! It’s the same now. I sometimes dream of achieving any of my previous goals and thinking that my life was “OK” before I died so many times later. Nowadays I’m interested in helping animals which need help.

The previous goals are important but the most important thing in my life is my happiness. Most of my happiness is from my family and my people. My family is more important than any previous goal. I regret that I could not care for my brother(dog) and family because I just cared for myself and focused on my success. After that, I’m trying to spend even one more minute with my family. I’d like to take care of my family and spend more time with them. Nothing is more important than my family.

This year I’m going to be independent of my current family and make a new family. I am looking forward to the future of me and my family living in a new home! I am worried about becoming the head of the household but I believe that everything will be fine in the future as I have lived so far. My first goal is to take care of my new family, my parents, and my brother(dog). As I said family is the most important! My most precious and important thing is my family!


Conclusion

I’m curious how I’ll write this next year! Let’s continue to work hard as I have done so far! Thanks to all that I have and work hard with humility!

virsh 명령어를 통해 QEMU KVM VM 인스턴스의 IP 주소를 찾아보자


환경

  • Linux
  • QEMU
  • KVM
  • virsh


사용법

  • 네트워크 선택
  • virsh net-list 명령어 사용
$ virsh net-list
 Name                 State      Autostart     Persistent
----------------------------------------------------------
 default              active     yes           yes
  • 선택한 네트워크에서 찾고자하는 VM 인스턴스의 IP 주소 확인
  • virsh net-dhcp-leases [네트워크 이름] 명령어 사용
$ virsh net-dhcp-leases default
 Expiry Time          MAC address        Protocol  IP address                Hostname        Client ID or DUID
-------------------------------------------------------------------------------------------------------------------
 2022-12-04 12:00:03  52:54:00:d2:2f:78  ipv4      192.168.123.163/24        twpower-vm      01:52:54:00:d2:2f:78


참고자료