[tip and trick] Scaledown/scaleup deamonset trên K8S

Đôi lúc muốn dừng chạy 1 số pod nào đó, nhưng lại ko muốn xóa nó đi, có thể chạy lại sau này.
Với deployment thì có thể set replica = 0 là xong, nhưng với deamonset thì ko được.

Có thể xài trick như sau:
Scaledown

kubectl -n <namespace> patch daemonset <daemonset name>  -p '{"spec": {"template": {"spec": {"nodeSelector": {"non-existing": "true"}}}}}'

Scale UP:

kubectl -n <namespace> patch daemonset <daemonset name>  --type json -p='[{"op": "remove", "path": "/spec/template/spec/nodeSelector/non-existing"}]'

 

Sử dụng docker – Ghi đè entrypoint mặc định của container với docker run

Entrypoint là những command mặc định, được chạy lần đầu khi khởi tạo container từ image. Entrypoint được định nghĩa ban đầu trong dockerfile. Tuy nhiên, đôi khi người quản trị muốn chạy cái gì đó khác bên trong container, vì vậy, có thể ghi đè ENTRYPOINT mặc định mỗi lần start container bởi tham số –entrypoint
Ví dụ,chạy ls khi start container
docker run --entrypoint "/bin/ls" 0cbf37812bff
Xoá toàn bộ container mặc định:
docker run -it –entrypoint=”” 0cbf37812bff
Tham số –entrypoint sẽ xoá toàn bộ entrypoint hiện có, và thêm entrypoint mới. Như ở lệnh trên, entrypoint mới rỗng nên những cái hiện có sẽ bị remove toàn bộ.

Tuy nhiên, nếu command có tham số (args) thì cú pháp sử dụng sẽ khác. Dưới đây là cách sử dụng sai:
[root@localhost ~]# docker run --entrypoint "/bin/ls -al /root" 0cbf37812bff

container_linux.go:247: starting container process caused "exec: \"/bin/ls -al /root\": stat /bin/ls -al /root: no such file or directory"
/usr/bin/docker-current: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "exec: \"/bin/ls -al /root\": stat /bin/ls -al /root: no such file or directory".

Để sử dụng tham số cho entrypoint, thêm tham số đằng sau image_id/ image_name
Ví dụ, chạy lệnh ls với thư mục /var
[root@localhost ~]# docker run --entrypoint "/bin/ls" 0cbf37812bff /var
cache
db
empty
games
lib
local
lock
log
mail
nis
opt
preserve
run
spool
tmp
yp
[root@localhost ~]#

Xử lý lỗi docker – WARNING: IPv4 forwarding is disabled. Networking will not work.


Tạo container docker thì được thông báo:

WARNING: IPv4 forwarding is disabled. Networking will not work.

Nguyên nhân do hệ điều hành host đangtawts IP forwarding, để bật lên, thêm/sửa dòng sau trong /etc/sysctl.conf
net.ipv4.ip_forward=1

Sau đó restart network, hoặc chạy lệnh
sysctl -p

Sử dụng docker – Tạo một container


Để có contaner, trước hết cần có image, tương tự như cài windows thì phải có đĩa vậy. Image của docker có thể được lấy tự động từ docker hub (mặc định) hoặc từ docker registry nội bộ của doanh nghiệp. Để lấy docker image về, sử dụng cú pháp:
docker pull
Ví dụ: Muốn lấy image của centos 6 về máy:
docker pull centos:6
List các image trên máy:
docker images
Output:
[root@localhost data]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/centos 6 0cbf37812bff 3 months ago 194 MB
docker.io/centos/systemd latest 78c36a71df7e 6 months ago 200 MB

Cú pháp:
docker run

Ví dụ: tạo container từ image centos 6 ở trên
docker run -it 0cbf37812bff
Nếu thành công sẽ truy cập vào màn hình bên trong container, tiếp theo có thể tiến hành cài app như 1 máy bình thường. Để quay lại màn hình máy bên ngoài (màn hình máy host), bấm Ctrl P và Ctrl Q
Các tham số option khi tạo container sẽ được giới thiệu ở bài sau.

Sử dụng docker – Các khái niệm cơ bản

Khái niệm

Docker – là một công cụ tạo môi trường được đóng gói (Container) mà không làm tác động tới môi trường hiện tại của máy, môi trường trong Docker sẽ chạy độc lập, được gọi là container. Mỗi containers chứa ứng dụng gồm chứa các thư viện riêng, nhưng kernel được chia sẻ với các containers khác. Mỗi kernel được chạy trong các môi trường độc lập với nhau. Docker chạy được trên mọi máy tính, đám mây hay bất cứ nền tảng nào. Vì vậy bạn có thể đẩy ứng dụng đến bất cứ đâu mà không cần phải quan tâm đến môi trường đích như thế nào …

Image

Image chỉ đơn giản là một file thông thường, trong file này có chứa sẵn các chương trình cần thiết để khởi tạo một môi trường nào đó. Ví dụ Image apache thì trong đó đã có sẵn apache kèm theo một số chương trình tiện ích để thao tác với apache. Image php đã chứa sẵn php kèm theo một số chương trình tiện ích… Chiếu theo các đặc điểm này, chúng ta có thể coi Image là một cái khuôn. Và khuôn này được dùng để “đúc” ra các Container. Nói cách khác, Image được sử dụng để khởi tạo ra một hay nhiều Container. Sau đó, các Container này được cấu hình như thế nào cũng không làm ảnh hưởng tới Image ban đầu.
Nếu so sánh với ảo hoả, thì một image có thể tương đương với một file ISO, container tương đương với VM

Container

Có rất nhiều process được thực thi trong một HĐH, các process này đều dùng chung một nguồn tài nguyên từ OS và các process này đều có thể truy cập được vào dữ liệu của các process khác. Trong trường hợp chúng ta muốn chạy một hay nhiều process trên một môi trường tách biệt hoàn toàn với HĐH, chúng ta cần phải khởi tạo một loại môi trường gọi là sandbox environment. Sandbox environment chỉ đơn giản là khái niệm chỉ một loại môi trường quản lý các process hoàn toàn tách biệt với môi trường máy Host. Sandbox cho phép chúng ta giới hạn quyền truy cập và tài nguyên sử dụng của các process.
Container chính là một ví dụ cụ thể của sandbox environment. Về cơ bản Container gom các tiến trình bên trong nó và thực thi tách biệt với các process của Host OS. Docker sử dụng cơ chế namespaces và control groups để tạo ra cơ chế quản lý Container.

Registry

Registry là một thư viện lưu trữ các Images được build sẵn từ các nhà phát triển. Docker cung cấp cho chúng ta một Registry có địa chỉ tại https://hub.docker.com.

Sử dụng docker – Xóa mù


Thuở xưa, thời còn mông muội, cả thế giới chỉ biết cài OS lên, nhét app vào rồi bấm chạy.
Khi phần cứng máy chủ trở nên rẻ tiền hơn, đồng thời, có những nhu cầu oái ăm phát sinh trong doanh nghiệp: một số app cần chạy độc lập –> mua máy khác cho nó chạy –> tăng số lượng phần cứng cần quản lý, lãng phí tài nguyên máy chủ do cái app đó dùng có tí tẹo tài nguyên mà không share cho con nào khác được. Và thế là Ảo hoá ra đời.
Như 1 sự cứu tinh, cho phép băm một máy chủ vật lý thành hàng chục OS độc lập chạy song song đồng thời , tương đương với 1 máy chủ vật lý được chia làm rất nhiều máy chủ con có cấu hình vừa đủ khác nhau cho từng nhu cầu. Việc này tận dụng tối đa khả năng sử dụng tài nguyên của doanh nghiệp, tiết kiệm tiền mua máy chủ cho hằng ha sa số công ty đang thắt lưng buộc bụng tìm kiếm lợi nhuận.
Tuy nhiên, không có gì hoàn hảo. Đối với doanh nghiệp to hơn 1 chút, họ cần tối ưu tài nguyên hơn nữa, chu trình phát triển phần mềm của họ muốn tối ưu tự động 1 cách tốt hơn nữa. Họ không muốn quan tâm tới đống máy chủ ảo lổn nhổn kia, chỉ muốn tập trung vào phát triển ứng dụng, triển khai nhanh chóng để đưa vào kinh doanh. Họ nhận ra rằng, nếu họ có 1000 máy chủ ảo giống nhau, thì họ tốn chi phí cho 1000 cái OS đang chạy, quá lãng phí. Và thế là lại có container ra đời.
Container giúp 1000 thằng ở trên dùng chung kernel của thằng OS trên máy vật lý, nhưng vẫn đảm bảo độc lập về mặt môi trường cho app chạy. Tức là, container chỉ là một cái hộp, bọc lấy cái app rồi đặt nó vào OS mà cái app đó cần. Mỗi app 1 hộp, trong hộp cài cắm những gì nó cần, và nó sẽ chỉ hoạt động trong cái hộp dành cho nó mà thôi. Những gì liên quan tới OS, phần cứng, tài nguyên, giờ đây sẽ có người khác lo cho nó. Kéo theo đó, container hiển nhiên nhẹ hơn rất nhiều so với máy ảo cồng kềnh, triển khai cũng nhanh hơn. Từ đây, mỗi 1 môi trường (OS) được gắn liền vào 1 app, quản lý thống nhất, dễ dàng và rẻ tiền hơn.

Docker là một platform để sử dụng container như thế.
– Cài đặt docker: Bấm vào đây
– Các khái niệm cơ bản về docker.
– Tạo một container centos:6.9 và cài đặt app.
– Lưu container để deploy tới nơi khác, hoặc backup.
– Image, docker file.
– Chu trình vòng đời của 1 container.
– Networking trong docker.

Cài đặt docker trên centos 6

yum install docker-io
service docker start

Nếu có lỗi không tìm thấy service docker, gõ lệnh docker thấy:

Segmentation Fault or Critical Error encountered. Dumping core and abort

Nguyên nhân do máy này đã cài đặt gói docker trước đó. Khi đó cần gỡ bỏ gói docker ra, cài lại:

yum -y remove docker.x86_64
yum install docker-io
service docker start