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:
- Tạo file pod.yaml từ container đang chạy
- Stop và remove container
- Khởi động và tạo pod
- Thay đổi tên container và pod.
- Kiểm tra pod đang hoạt động
- 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
https://stackoverflow.com/questions/68068788/communication-between-podman-containers-without-root
Trả lờiXóahttps://mohitgoyal.co/2021/04/23/spinning-up-and-managing-pods-with-multiple-containers-with-podman/
Trả lờiXóa