Golfreeze.packetlove.com: Life style of Golfreeze Canon400D Family kammtan.com Jazz Freebsd Unix Linux System Admin guitar Music
All about unix linux freebsd and FAQ for Packetlove.com Web hosting , Mail hosting , VoIP + IP PBX server => All about virtualization openstack + vmare esxi => Topic started by: golfreeze on สิงหาคม 01, 2017, 08:47:25 am
-
หลังจากสร้าง 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
-
ท่านใดที่เคยใช้งานตัว 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
-
ถ้าต้องการสร้าง 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