Thứ Bảy, 15 tháng 5, 2021

[K8s] Kubernetes Object

 I. References

1. https://kubernetes.io/docs/concepts/overview/working-with-objects/kubernetes-objects/

II. Các đối tượng của K8s (Kubernetes objects)

1. Định dạng

Sử dụng định dang Yaml 

2. K8sO lưu trữ các thông tin

- Ứng dụng container đang chạy là gì

- Tài nguyên cấp phát

- Các chính sách áp dụng cho ứng dụng: restart, update, khẳ năng chịu lỗi

K8sO có thể tạo, chỉnh sửa, xóa thông qua Kubernet API

3. Object Spec và Status (đặc tả và trạng thái object)

Hầu hết các K8sO đều gồm 2 object lồng bên trong là spec và status

- Spec: mô tả về thuộc tính object khi tạo

- Status: mô tả trạng thái hiện tại của Object

Tìm hiểu thêm về các thông tin spec, status, metadata có thể xem trong link sau K8s API Conventions

4. Mô tả một đối tượng K8sO

Thông thường khi sử dụng API để tạo Object, các thông tin được lưu dạng JSON trong request body. Khi dùng command kubectl thì các thông tin được lưu trong file .yaml , kubectl sẽ convert  thông tin sang dạng JSON khi thực hiện call API.

VD: file mẫu application/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

 

 

Khi tạo Deployment sử dụng file .yaml tạ sử dụng lệnh:

 

kubectl apply -f https://k8s.io/examples/application/deployment.yaml --record

 

 

Output thành công như sau, với các thành phần mô tả trong file hiển thị màu highlight tương ứng như hình dưới.

 
deployment.apps/nginx-deployment created

 

 

5. Các trường bắt buộc trong file .yaml

·         apiVersion – version của API sử dụng để tạo object

·         kind loại object muốn tạo

·         metadata – Dữ liệu giúp xác định duy nhất đối tượng, bao gồm name, String UID, namespace (tùy chọn, nếu không ghi sẽ là default)

·         Spec – mô tả các thông tin mong muốn của Object khi chạy

Spec của object khác nhau với từng loại đối tượng K8s, chứa các trường lồng nhau và đặc tả khác nhau.

Bạn có thể tìm đặc tả cho từng loại object theo link sau: Kubernetes API Reference

VD: Đặc tả cho 1 POD: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.21/#podspec-v1-core

-          Example: định dạng file yaml mẫu

-          apiVersion: v1 
o    Group : core (core thì không cần viết vào Apiversion)
o    Version: v1
-          Kind: Pod
-          Appears In:  Link liệt kê các Object chứa đặc tả này
 
Lưu ý: It is recommended that users create Pods only through a Controller, and not directly. See Controllers: DeploymentJob, or StatefulSet.

 

6. K8s API references gồm các thông tin:

-          Appears In: Link các object chứa Object này

-          Example: định dạng file yaml mẫu

 

 

-          Mô tả tên group, version, kind tương ứng, Group core không cần viết trong apiVersion:

-          FieldDescription: các field và description tương ứng.

Click vào các trường có link để chuyển sang mô tả tương ứng của trường đó.

VD: click và  PodSpec để biết mô tả các trường của PodSpec, các trường được đẩy lùi dòng theo cấu trúc của Yaml.

 


Thứ Ba, 20 tháng 4, 2021

[k8s] Kiến trúc cụm

 A. References:

  1. https://kubernetes.io/docs/concepts/architecture/
B. Kiến trúc cụm
Gồm các thành phần
  • Node
  • Control Plane Node Communication
  • Controllers
  • Cloud Controller Manager
I. Node
K8s đặt các Container để chạy Pod trên các Node.
Node gồm các thành phần  Kubelet, Container Runtime, Kube-proxy
Mỗi Node được quản lý bởi Control Plane

1. Quản lý node
a. Add node
Có 2 cách để add 1 node vào cụm (API server)
  1. Kubelet tại node tự đăng ký vào Control Plane
  2. Người dùng add Node Object    
example, if you try to create a Node from the following JSON manifest:
{
  "kind": "Node",
  "apiVersion": "v1",
  "metadata": {
    "name": "10.240.79.157",
    "labels": {
      "name": "my-first-k8s-node"
    }
  }
}

b. Tên node
2 node không cùng tên

c. Kubelet tự đăng ký node ( self registration node)
set --register-node is true
d. Người dùng add Node
Sử dụng Kubectl
set --register-node=false
Đánh dấu node unscheduler, run
kubectl cordon $NODENAME

e. Node status

A Node's status contains the following information:

Chạy lệnh sau: 
kubectl describe node <insert-node-name-here>


II. Control Plane node communication
III. Controller
IV. Cloud Controller Manager



[k8s] Các thành phần của Kubernetes

 I. References

  1. https://kubernetes.io/docs/concepts/overview/components/

II. Các thành phần chính

    

1. Các thành phần của Control Plane

Chạy trên master server

a. Kube-apiserver

b. etcd

c. kube-scheduler

d. kube-controller-manager

e. cloud-controller-manager

2. Thành phần của Node

Chạy trên các node

a. Kubelet

b. Kube-proxy

c. Container runtime

3. Add on

Cài đặt thêm các tính năng cho cụm

Danh sách các Addon do K8s khuyến nghị

Trong đó có 1 số add on hay:  Weave Scope , CoreDNS,  DashBoard

Trong hướng dẫn sau tôi sẽ dùng Rancher để tích hợp quản lý cụm K8s

a. DNS

b. Web UI (DashBoard)

c. Container Resource Monitoring

d. Cluster level logging

Thứ Hai, 19 tháng 4, 2021

[oracle] SQL tạo procedure và job

I. References

  1. https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_6009.htm
  2. https://docs.oracle.com/html/E25494_01/scheduse002.htm#i1009668

II.Tutorial
1. Tạo procedure
create or replace PROCEDURE synAirtimeReport as
begin
insert into report
select report_seq.nextval,service_id,mt_id,invite,sysdate-1/24,1 ,0 from(
  select service_id,mt_id,count(*) as invite from AIRTIME_INVITATION
  where log_time >= trunc(sysdate-1/24,'HH24') and log_time < trunc(sysdate,'HH24')
  group by service_id,mt_id
);
end;
2. Thêm vào job
BEGIN
DBMS_JOB.isubmit (
job => 179,
what => 'BEGIN PR_NOKIA_OVIA_INS; COMMIT; END;',
next_date => SYSDATE + 2/24,
interval => 'trunc(SYSDATE +1) + 2/24');
COMMIT;

END;

Chủ Nhật, 18 tháng 4, 2021

[k8s] Hướng dẫn cài đặt kubernetes offline (master single node)

 I. References

  1. https://kubernetes.io/docs/setup/production-environment/
  2. https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
  3. https://www.centlinux.com/2019/04/install-kubernetes-k8s-offline-on-centos-7.html
  4. https://docs.genesys.com/Documentation/GCXI/9.0.0/Dep/DockerOffline

II. Setup

Yêu cầu sudo hoặc quyền root, server Centos 7+

1. Cài đặt Container Runtimes

Để chạy các container (POD) trên mỗi node, cần phải cài đặt CR (container runtime) trên mỗi node.

Có nhiều loại CR, 3 loại thường dùng cài với Kubernetes trên linux:

 . Cgroup Driver

Dùng để quản lý các tài nguyên cấp cho các tiến trình, trên linux thường dùng Systemd

Trong hướng dẫn này sử dụng Docker làm CR cho K8s.

a. Hướng dẫn cài Docker, chi tiết tham khảo trang Docker

https://docs.docker.com/engine/install/#server

Tải file rpm để cài đặt trên các server offline

b. Cấu hình Docker deamon, sử dụng Systemd để quản lý container's cgroups

Chỉnh sửa file cấu hình docker deamon : /etc/docker/daemon.json

sudo mkdir /etc/docker
cat <<EOF | sudo tee /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF

Note: overlay2 is the preferred storage driver for systems running Linux kernel version 4.0 or higher, or RHEL or CentOS using version 3.10.0-514 and above.

c. Restart docker

sudo systemctl enable docker
sudo systemctl daemon-reload
sudo systemctl restart docker

Note:

For more information refer to

2. Có 3 tool được khuyến nghị bởi K8s

Trong bài viết này sẽ hướng dẫn cài Kubeadm với master single node

https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

a. Bật mode bridged traffic trên iptables

. Check mode br_netfilter

lsmod | grep br_netfilter

  • Nếu chưa bật thì gọi lệnh sau để bật

sudo modprobe br_netfilter

  • Set các tham số forward network

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system

For more details please see the Network Plugin Requirements page.

b. Mở iptables tương ứng các port sau

  • Control-plane nodes

ProtocolDirectionPort RangePurposeUsed By
TCPInbound6443*Kubernetes API serverAll
TCPInbound2379-2380etcd server client APIkube-apiserver, etcd
TCPInbound10250kubelet APISelf, Control plane
TCPInbound10251kube-schedulerSelf
TCPInbound10252kube-controller-managerSelf

  • Worker nodes

ProtocolDirectionPort RangePurposeUsed By
TCPInbound10250kubelet APISelf, Control plane
TCPInbound30000-32767NodePort Services†All

c. Cài đặt Kubeadm, Kubelet và Kubectl

Cài đặt Kubeadm, Kubelet, Kubectl trên tất cả các server vật lý.

  • kubeadm: the command to bootstrap the cluster.

  • kubelet: the component that runs on all of the machines in your cluster and does things like starting pods and containers.

  • kubectl: the command line util to talk to your cluster.

 Chuẩn bị 1 server kết nối tới internet để tải package và images phục vụ cho việc cài đặt.