Author Topic: เกี่ยวกับการใช้งานเบื้องต้น GKE Google Kubernetes Engine  (Read 9682 times)

golfreeze

  • Administrator
  • Hero Member
  • *****
  • Posts: 2145
    • View Profile
    • นั่งสมาธิ สติปัฏฐานสี่ พาเที่ยววัด แนะนำวัด แจกcd ธรรมะฟรี
    • Email
หลังจากสร้าง cluster-1 ผ่าน kubernetes ใน GCP เสร็จแล้วทำการเข้าผ่าน google cloud shell ในมุมขวาบน ได้เลยครับ แล้วทำการ set project เพื่อเข้าไปจัดการผ่าน command line ได้เลย
ค้นหา project id ก่อนครับ
โดยที่เราทราบชื่อ project อยู่แล้วคือ temp_pkl (ตัวที่ตั้งไว้ตั้งแต่ตอนเริ่มใช้งาน GCP)

packetlove@temp_pkl:~$ gcloud projects describe temp_pkl
createTime: '2017-05-20T06:04:19.961Z'
lifecycleState: ACTIVE
name: temp_pkl
parent:
  id: '9614763xxxx'
  type: organization
projectId: temp_pkl
projectNumber: '892160xxxxxx'

##เริ่ม set project
packetlove@temp_pkl:~$ gcloud config set project temp_pkl
Updated property [core/project].

##ตั้งค่า compute/zone ที่เราเลือก
packetlove@temp_pkl:~$gcloud config set  compute/zone us-central1-a

##ทำการเข้าไปจัดการ cluster-1 ที่สร้างไว้บน GCP ครับ
packetlove@temp_pkl:~$ gcloud container clusters get-credentials cluster-1
Fetching cluster endpoint and auth data.
kubeconfig entry generated for cluster-1.

เสร็จแล้วทำการ รัน binding port 8001 ทำเป็น proxy โดยใช้งาน
$./kubectl proxy

แล้วก็เข้าใช้งาน kubernetes ผ่าน api url ตามนี้ครับ => http://localhost:8001/ui

ทำการเลือกลง nginx pod ดูครับ

หรือถ้าท่านใด จะลองเทสเข้าเว็บดู แต่ต้องเปิด policy Allow HTTP traffic ไว้ด้วยนะครับ
Firewalls
Allow HTTP traffic

จะรู้ได้ไงว่ารัน nginx อยู่ที่ nodes ไหนใน 3 nodes ก็
#kubectl describe pods | more

#kubernetes-training-by-packetlove.com
กอล์ฟ [at] packetlove.com
« Last Edit: สิงหาคม 25, 2017, 06:36:58 PM by golfreeze »

golfreeze

  • Administrator
  • Hero Member
  • *****
  • Posts: 2145
    • View Profile
    • นั่งสมาธิ สติปัฏฐานสี่ พาเที่ยววัด แนะนำวัด แจกcd ธรรมะฟรี
    • Email
ท่านใดที่เคยใช้งานตัว kubernetes หรือ k8s นั้นจะทราบว่าหน่วยที่เล็กที่สุดใน k8s คือ pods ครับ
ซึ่งใน pods นั้นเอง จะประกอบไปด้วย container ของ micro-service ที่รันทำงานอยู่ เช่นเป็น pods ของ web-static file
หรือ pods ของ mysql database และจะผูกการทำงานกับ ip address ไว้ด้วย

และส่วนของ pods จะอยู่ในส่วนของ nodes อีกทีหนึ่งครับ
เวลาจะ deploy configure ที่เป็น .yaml file ขึ้นไปก็ให้กดไปที่เมนู deployment ครับผม

และการทำงานของตัว pods นั้นมี life cycle ของมันครับ รวมทั้งถ้ามีการทำงานที่ผิดปกติ ตัว k8s จะคอยเช็คอยู่ ถ้าทำงานผิดปกติจริงจะ kill pods นั้นแล้วสร้างให้ใหม่ครับ โดยอัตโนมัติ แต่ว่าถ้าเราทำการ delete pods นั้นเอง จะต้องให้ระบบสร้างให้ประมาณไม่เกิน 60 วินาทีนะครับ
ถึงจะเรียกใช้งาน pods ที่รัน container นั้นได้ปกติอีกครั้ง

#kubernetes-training-by-packetlove.com
กอล์ฟ [at] packetlove.com

golfreeze

  • Administrator
  • Hero Member
  • *****
  • Posts: 2145
    • View Profile
    • นั่งสมาธิ สติปัฏฐานสี่ พาเที่ยววัด แนะนำวัด แจกcd ธรรมะฟรี
    • Email
ถ้าต้องการสร้าง wordpress + wordpress_db เพื่อเทสใน k8s ก็สามารถทำตามขั้นตอนโดยสรุปได้ดังนี้ครับ

1.ทำการสร้าง PersistentVolumes เพื่อเตรียมไว้ใช้งาน wordpress-static-file และ wordpress_database
2.ทำการสร้าง secret key เพื่อใช้งานกับ mysql
3.ทำการ deploy file mysql-deployment.yaml และ wordpress-deployment.yaml
4.ทำการเทสเข้า wordpress url

##วิธีขั้นตอนโดยละเอียด

### Begin of local-volumes.yaml ###
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-pv-1
  labels:
    type: local
spec:
  capacity:
    storage: 40Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /tmp/data/pv-1
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-pv-2
  labels:
    type: local
spec:
  capacity:
    storage: 40Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /tmp/data/pv-2
### End of local-volumes.yaml ###

ทำการสร้าง persistent volumes
./kubectl create -f local-volumes.yaml

การสร้าง secret-password ใน k8s
./kubectl create secret generic mysql-pass --from-literal=password=yourpassword

ทำการเช็คว่า secret ที่สร้างแสดงขึ้นมาหรือเปล่า
./kubectl get secrets

###Begin mysql-deployment.yaml ###
apiVersion: v1
kind: Service
metadata:
  name: wordpress-mysql
  labels:
    app: wordpress
spec:
  ports:
    - port: 3306
  selector:
    app: wordpress
    tier: mysql
  clusterIP: None
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
  labels:
    app: wordpress
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: wordpress-mysql
  labels:
    app: wordpress
spec:
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: wordpress
        tier: mysql
    spec:
      containers:
      - image: mysql:5.6
        name: mysql
        env:
          # $ kubectl create secret generic mysql-pass --from-file=password.txt
          # make sure password.txt does not have a trailing newline
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-pass
              key: yourpassword
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pv-claim
###End mysql-deployment.yaml ###

ทำการ deploy MySQL ผ่านไฟล์คอนฟิค mysql-deployment.yaml file:
./kubectl create -f mysql-deployment.yaml

### begin wordpress-deployment.yaml ###
apiVersion: v1
kind: Service
metadata:
  name: wordpress
  labels:
    app: wordpress
spec:
  ports:
    - port: 80
  selector:
    app: wordpress
    tier: frontend
  type: LoadBalancer
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: wp-pv-claim
  labels:
    app: wordpress
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: wordpress
  labels:
    app: wordpress
spec:
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: wordpress
        tier: frontend
    spec:
      containers:
      - image: wordpress:4.8.0-apache
        name: wordpress
        env:
        - name: WORDPRESS_DB_HOST
          value: wordpress-mysql
        - name: WORDPRESS_DB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-pass
              key: password.txt
        ports:
        - containerPort: 80
          name: wordpress
        volumeMounts:
        - name: wordpress-persistent-storage
          mountPath: /var/www/html
      volumes:
      - name: wordpress-persistent-storage
        persistentVolumeClaim:
          claimName: wp-pv-claim
### end wordpress-deployment.yaml ###

ทำการ deploy Wordpress ผ่านไฟล์คอนฟิค wordpress-deployment.yaml file:
./kubectl create -f wordpress-deployment.yaml

ทำการเช็คว่า pods ถูกสร้างขึ้นมาแล้วหรือเปล่า
./kubectl get pods

รอให้สักประมาณ​ 50 วินาที แล้วเทสเข้าตัว app wordpress ผ่าน url ที่ขึ้นมาใน k8s dashboard ได้เลยครับ
./kubectl proxy
k8s dashboard binding port proxy => http://localhost:8001/ui

ถ้าจะทำการลบ secret ผ่าน cli ก็
./kubectl delete secret mysql-pass

ถ้าจะทำการลบ deployment app สามารถรันผ่าน cli ตามด้านล่างครับ ใส่ชื่อ app=ชื่อappที่ต้องการลบ
./kubectl delete deployment -l app=wordpress
./kubectl delete service -l app=wordpress

ทำการลบ PersistentVolumeClaim  และ PersistentVolumes:
./kubectl delete pvc -l app=wordpress
./kubectl delete pv local-pv-1 local-pv-2

กอล์ฟ [at] packetlove.com
#k8strainingbypacketlove #kubernetestraining
« Last Edit: สิงหาคม 26, 2017, 10:36:38 AM by golfreeze »