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

Amazon CDK cho K8s - những bước cơ bản.

 

Như chúng ta đã biết thì CDK là một framework của Amazon để viết code cho việc thiết lập hạ tầng mạng cho những ứng dụng chạy trên Amazon Web Service. 

cdk8s

Không giống như các công cụ automation hạ tầng khác, muốn sử dụng framework này bạn phải biết ít nhất 1 ngôn ngữ lập trình như : TypeScript, .NET, Java hay Python. 

Trong bài viết này mình đề cập đến dùng CDK framework để viết một hạ tầng kubernetes trên AWS dùng ngôn ngữ python. 


Trước khi đi vào thiết lập một ví dụ dùng ngôn ngữ python thì bạn cần cài Python và PIP kèm theo. 

I. Các tool cần có:

    Python >= 3.7.7

    pipenv version 2018.11.26 hoặc cao hơn. 

II. Cài đặt: 

    Cài đặt cdk8s thì bạn có 2 cách cài: 

$ brew install cdk8s

hoặc: 

$ npm install -g cdk8s-cli

III. Tạo project:

    Ok, giờ bạn tạo project cdk bạn chạy các command sau: 

$ mkdir hello
$ cd hello
$ cdk8s init python-app
creating a new project from template: python-app
...

Quá trình làm mình sẽ thực hiện các bước sau:

Tạo một thư mục hello 

Cài đặt các thư viện cdk8s 

Nhập tất cả đối tượng API Kubernetes 

IV. Apps & Charts:

Tại lúc này một file `main.py` được tạo ra có nội dung sau : 

#!/usr/bin/env python
from constructs import Construct
from cdk8s import App, Chart

class MyChart(Chart):
  def __init__(self, scope: Construct, ns: str, **kwargs):
    super().__init__(scope, ns, **kwargs)

    # define resources here


app = App()
MyChart(app, "hello")

app.synth()

File trên được tạo ra khi ta chạy : cdk8s init

Khi bạn chạy : cdk8s synth một file : manifest YAML sẽ được tạo ra cho một Chart 

$ cdk8s synth
dist/hello.k8s.yaml

$ cat dist/hello.k8s.yaml
<EMPTY>

V. Import Constructs cho Kubernetes API:

OK, bây giờ ta định nghĩa file main.py như sau : 

#!/usr/bin/env python
from constructs import Construct
from cdk8s import App, Chart

from imports import k8s


class MyChart(Chart):
    def __init__(self, scope: Construct, name: str):
        super().__init__(scope, name)

        # define resources here
        label = {"app": "hello-k8s"}

        k8s.Service(self, 'service',
                    spec=k8s.ServiceSpec(
                      type='LoadBalancer',
                      ports=[k8s.ServicePort(port=80, target_port=k8s.IntOrString.from_number(8080))],
                      selector=label))

        k8s.Deployment(self, 'deployment',
                       spec=k8s.DeploymentSpec(
                         replicas=2,
                         selector=k8s.LabelSelector(match_labels=label),
                         template=k8s.PodTemplateSpec(
                           metadata=k8s.ObjectMeta(labels=label),
                           spec=k8s.PodSpec(containers=[
                             k8s.Container(
                               name='hello-kubernetes',
                               image='paulbouwer/hello-kubernetes:1.7',
                               ports=[k8s.ContainerPort(container_port=8080)])]))))


app = App()
MyChart(app, "hello")

app.synth()

Như chúng ta thấy ở trên thì ứng dụng kubernetes có 2 resources là : service và deployment, đây là 2 thành phần chính của một ứng dụng cơ bản của kubernetes. 

Bây giờ ta chạy lệnh: cdk8s synth,  một file hello.k8s.yaml được tạo và có nội dung sau: 

spec:
  ports:
    - port: 80
      targetPort: 8080
  selector:
    app: hello-k8s
  type: LoadBalancer
kind: Service
apiVersion: v1
metadata:
  name: hello-service-9878228b
---
spec:
  selector:
    matchLabels:
      app: hello-k8s
  template:
    metadata:
      labels:
        app: hello-k8s
    spec:
      containers:
        - name: hello-kubernetes
          image: paulbouwer/hello-kubernetes:1.7
          ports:
            - containerPort: 8080
  replicas: 2
kind: Deployment
apiVersion: apps/v1
metadata:
  name: hello-deployment-c51e9e6b

Đó là file manifest của kubernetes, giờ ta apply để tạo một ứng dụng hello chạy lệnh sau: 

$ kubectl apply -f dist/hello.k8s.yaml

Đến đây bạn có thể sử dụng constructs trong python để : 


  • You can express the abstraction's API using strong-typed data types
  • You can express rich interactions with methods and properties
  • You can create polymorphic programming models through interfaces and base classes
  • Share them through regular package managers
  • Test them using our familiar testing tools and techniques
  • Version them
  • ...and do all that stuff that we've been doing with software in the past 20 years.


Lúc này file main.py được constructs như sau: 

#!/usr/bin/env python
from constructs import Construct
from cdk8s import App, Chart

from webservice import WebService


class MyChart(Chart):
    def __init__(self, scope: Construct, name: str):
        super().__init__(scope, name)

        WebService(self, 'hello', image='paulbouwer/hello-kubernetes:1.7', replicas=2)
        WebService(self, 'ghost', image='ghost', container_port=2368)


app = App()
MyChart(app, "hello")

app.synth()





Nhận xét

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

Cách sử dụng sys.argv trong python.

Cách sử dụng sys.argv trong python. sys.argv là môt danh sách [list] trong python, nó được sư dụng khi bạn chạy một lệnh command-line nào đó trên hệ thống. Và argument này được đẩy vào script python để thực thi khi chạy câu lệnh. Ví dụ: python sys.argv arg1 arg2 Trước tiên bạn phải import mô đun sys trong script. import sys print "This is the name of the script: " , sys . argv [ 0 ] print "Number of arguments: " , len ( sys . argv ) print "The arguments are: " , str ( sys . argv ) Tên của script này : sysargv.py Số lượng arg là : 1 Arg là : ['sysargv.py'] python test1020.py 111 This is the name of the script:  test1020.py Number of arguments:  2 The arguments are:  ['test1020.py', '111']

Thiết kế một RESTful API bằng python và flask.

Như các bạn đã biết thì REST viết tắt bởi REpresentational State Transfer. Bạn có thể tham khảo thêm ở đây . Vậy REST là gì: Có 6 yếu tố của REST như sau: 1. Client-Server: phía server side phục vụ như một service còn phía client sẽ dùng service này. 2.Stateless:  Mỗi request từ client phải chứa tất cả các thông tin mà phía server yêu cầu phải có. Nói nôm na là mỗi request chứa các thông tin riêng rẽ không liên quan đến những request khác. 3. Cacheable : Phía server side phải cảnh báo chỉ ra cho client side biết là request đó có cache hay không. 4. Hệ thống phân lớp: Giao tiếp giữa server side và client side có thể thông qua lớp trung gian ở giữa để trả lời các request được gọi mà không cân phía client phải làm những động tác khác nữa. 5. Các cổng giao tiếp là giống nhau : Các phương thức giao tiếp giữa client và server là khuôn mẫu giống nhau. 6. Mã code linh động. Phía server có thể thực thi cho môt API gọi duy nhất mà không ảnh hưởng tới các API khác. RESTful web

Cài đặt docker trên windows server 2016.

1. Cài đặt Windows Server 2016 Container Feature:  Mở PowerShell : Cài đặt các container feature dùng powershell: Dùng lệnh: InstallWindowsFeature containers Restart lại windows: 2. Cài đặt windows server 2016 base image:  Cài đặt mô đun : ContainerImage Dùng lệnh: Install-PackageProvider ContainerImage -force List các image có giá trị: Cài đặt Windows Server Core : 3. Cài đặt docker trên windows server 2016. Download script để cài đặt docker : Chạy script : Kiểm tra các image có trên server :