Chuyển đến nội dung chính

Podman play kube - Part 1

Khi tìm hiểu về Kubernetes, mình thấy hơi khó khăn do mình tự học và practice tại nhà. Mình thấy 1 con đường học dễ hơn để tiếp cận Kubernetes là đi từ Docker => Podman => Pod => Minikube rồi tới Kubernetes. Không biết như vậy có đúng không?

Podman play kube là gì?


Podman play kube sẽ đọc trong một tệp có cấu trúc của Kubernetes YAML. Sau đó, nó sẽ tạo lại các container, pod hoặc volume được mô tả trong YAML. Sau đó, các container trong một pod sẽ được khởi động và ID của pod mới hoặc tên của volume mới được xuất ra.

Vậy pod là gì? Theo định nghĩa trong Kubernetes: "Pod là đơn vị nhỏ nhất trong Kubernetes. Một Pod có thể chứa 1 hoặc nhiều containers"

Trong bài viết này, mình sẽ làm 1 demo nhỏ gồm 1 pod chứa 1 container. Các bài tiếp theo, mình sẽ làm thêm các ví dụ tạo nhiều container trong 1 pod và sử dụng local image trong Minikube, sử dụng driver podman.

Các bạn có thể xem 1 ví dụ cách tạo Pod và Service trong minikube sử dụng Hyper-V: https://nhatkyhoctap.blogspot.com/2022/08/kubernetes-setup-project-aspnet-core.html

Cài đặt Podman: https://nhatkyhoctap.blogspot.com/2022/09/buildah-va-podman.html

Tạo Project ASP.NET Core

Trong phần này, mình sử dụng Project .NET. Các bạn có thể thay thế bằng các Project khác như PHP, Java, NodeJs, ... miễn sao thay đổi file Dockerfile cho phù hợp.

Tạo Project ASP.NET Core MVC với tên PodmanExample. Sau đó bạn tạo Dockerfile với nội dung sau:

# syntax=docker/dockerfile:1

FROM mcr.microsoft.com/dotnet/sdk:6.0-alpine3.16 AS build-env
WORKDIR /app
#Copy csproj and restore as distinct layers

COPY *.csproj ./

RUN dotnet restore

#Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out

#Build runtime image

FROM mcr.microsoft.com/dotnet/aspnet:6.0.9-alpine3.16

WORKDIR /app

COPY --from=build-env /app/out .

ENTRYPOINT ["dotnet", "PodmanExample.dll"]
Tạo images, container:
$ podman bud -t podman-example .
$ podman run -dit --name podman-example -p 8080:80 podman-example
Liệt kê các process của container:
$ podman top -l
USER        PID         PPID        %CPU        ELAPSED        TTY         TIME        COMMAND
root        1           0           0.000       28.971110876s  pts/0       0s          dotnet PodmanExample.dl

Sử dụng Podman Play Kube

Sẽ có các step như sau:

  1. Tạo file pod.yaml từ container đang chạy
  2. Stop và remove container
  3. Khởi động và tạo pod
  4. Thay đổi tên container và pod.
  5. Kiểm tra pod đang hoạt động
  6. Remove pod

Tạo file pod từ running container:

podman generate kube podman-example -f podman-example-pod.yaml
File podman-example-pod.yaml sẽ có nội dung như sau:
# Save the output of this file and use kubectl create -f to import
# it into Kubernetes.
#
# Created with podman-3.4.2
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: "2022-10-03T17:14:37Z"
  labels:
    app: podman-example
  name: podman-example
spec:
  containers:
  - image: localhost/podman-example:latest
    name: podman-example
    ports:
    - containerPort: 80
      hostPort: 8080
    securityContext:
      capabilities:
        drop:
        - CAP_MKNOD
        - CAP_NET_RAW
        - CAP_AUDIT_WRITE
    stdin: true
    tty: true
Bạn đổi tên pod từ "podman-example" thành "podman-example_pod" Dừng và remove container
podman stop -l
podman rm -l
Tạo pod và container:
$ podman play kube podman-example-pod.yaml
Pod:
e0575ae33a035f2fbdd49942904d2636a7dff5b643cff6c079453e00e4975023
Container:
1dfd3ed4399395678b86e86b59155df62a288363382ffeba0166fa9c935aa963
Thực hiện việc kiểm tra
$ podman pod ps
POD ID        NAME                STATUS      CREATED         INFRA ID      # OF CONTAINERS
e0575ae33a03  podman-example_pod  Running     48 seconds ago  f042d2792c23  2
anbinhtrong@Laptop:~$ podman ps
CONTAINER ID  IMAGE                            COMMAND     CREATED             STATUS                 PORTS
    NAMES
f042d2792c23  k8s.gcr.io/pause:3.5                         About a minute ago  Up About a minute ago  0.0.0.0:8080->80/tcp  e0575ae33a03-infra
1dfd3ed43993  localhost/podman-example:latest              About a minute ago  Up About a minute ago  0.0.0.0:8080->80/tcp  podman-example_pod-podman-example
Remove pod và container
$ podman play kube --down podman-example-pod.yaml
Pods stopped:
e0575ae33a035f2fbdd49942904d2636a7dff5b643cff6c079453e00e4975023
Pods removed:
e0575ae33a035f2fbdd49942904d2636a7dff5b643cff6c079453e00e4975023
Thực hiện kiểm tra lại pod và container
anbinhtrong@Laptop:~/Docker/PodmanExample/PodmanExample$ podman ps
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES
anbinhtrong@Laptop:~/Docker/PodmanExample/PodmanExample$ podman pod ls
POD ID      NAME        STATUS      CREATED     INFRA ID    # OF CONTAINERS

Tham khảo

https://technology.amis.nl/platform/podman/adding-podman-to-my-vm-with-minikube-part-2/

https://www.redhat.com/sysadmin/podman-play-kube-updates

Chúc các bạn thành công

Nhận xét

  1. https://stackoverflow.com/questions/68068788/communication-between-podman-containers-without-root

    Trả lờiXóa
  2. https://mohitgoyal.co/2021/04/23/spinning-up-and-managing-pods-with-multiple-containers-with-podman/

    Trả lờiXóa

Đăng nhận xét

Bài đăng phổ biến từ blog này

[ASP.NET MVC] Authentication và Authorize

Một trong những vấn đề bảo mật cơ bản nhất là đảm bảo những người dùng hợp lệ truy cập vào hệ thống. ASP.NET đưa ra 2 khái niệm: Authentication và Authorize Authentication xác nhận bạn là ai. Ví dụ: Bạn có thể đăng nhập vào hệ thống bằng username và password hoặc bằng ssh. Authorization xác nhận những gì bạn có thể làm. Ví dụ: Bạn được phép truy cập vào website, đăng thông tin lên diễn đàn nhưng bạn không được phép truy cập vào trang mod và admin.

ASP.NET MVC: Cơ bản về Validation

Validation (chứng thực) là một tính năng quan trọng trong ASP.NET MVC và được phát triển trong một thời gian dài. Validation vắng mặt trong phiên bản đầu tiên của asp.net mvc và thật khó để tích hợp 1 framework validation của một bên thứ 3 vì không có khả năng mở rộng. ASP.NET MVC2 đã hỗ trợ framework validation do Microsoft phát triển, tên là Data Annotations. Và trong phiên bản 3, framework validation đã hỗ trợ tốt hơn việc xác thực phía máy khách, và đây là một xu hướng của việc phát triển ứng dụng web ngày nay.

Tổng hợp một số kiến thức lập trình về Amibroker

Giới thiệu về Amibroker Amibroker theo developer Tomasz Janeczko được xây dựng dựa trên ngôn ngữ C. Vì vậy bộ code Amibroker Formula Language sử dụng có syntax khá tương đồng với C, ví dụ như câu lệnh #include để import hay cách gói các object, hàm trong các block {} và kết thúc câu lệnh bằng dấu “;”. AFL trong Amibroker là ngôn ngữ xử lý mảng (an array processing language). Nó hoạt động dựa trên các mảng (các dòng/vector) số liệu, khá giống với cách hoạt động của spreadsheet trên excel.