目前由於這幾年都待在台中,身邊也都是一些台中的朋友,礙於中部並沒有像北部那麼多的技術交流社團或是活動,所以想說建立一個交流社團,提供給中部想學習或交流的朋友們參加。
當然不管是剛入門學習,或者是已經使用許久想上去分享的朋友,社團都歡迎各位,如果人數夠多,或許還有機會舉辦一些研討會等等,或者是開課授課等活動,希望大家熱烈參與。
目前由於這幾年都待在台中,身邊也都是一些台中的朋友,礙於中部並沒有像北部那麼多的技術交流社團或是活動,所以想說建立一個交流社團,提供給中部想學習或交流的朋友們參加。
當然不管是剛入門學習,或者是已經使用許久想上去分享的朋友,社團都歡迎各位,如果人數夠多,或許還有機會舉辦一些研討會等等,或者是開課授課等活動,希望大家熱烈參與。
大約在一年多之前,因為公司的開發環境都是Macbook,所以一些好用的開發工具資源都很好找,但在Windows平台上,沒有什麼好用的工具,最近因為一些需求導致要協助幫忙尋找,然後就有了這篇文章
在以往使用Macbook的時候,都會使用telepresence作為本地與kubernetes cluster的串接工具,而在windows上目前我只找到bridge to kubernetes這個附屬在visual studio與visual studio code下的套件,加上vs code在macbook也可以使用,所以這篇文章就以Macbook為基礎驗證,當然windows也是可行的
以下預設已經設定完kubernetes cluster的連線,並且vs code已經可以連上kubernetes cluster
首先打開vs code,安裝bridge to kubernetes,之後按下command +⇧+P,開始設定
接著會直接讀取連線的namespace的設定,直接讀出namespace中的service,這裡只有設定了一個service,選擇他
接著輸入你要串接此service到本地的port號,我本地會使用docker啟動一個nginx,設定8080
然後選取config設定,這裡因為我不是藉由執行程式啟動,所以我選擇 with out lauch configuration,要注意的是,選擇此設定要連接至cluster需要手動執行task
然後是選擇需要全部導流(for 開發)還是隔離導流(for 正式),這裡選擇全部導流
這時右下角會顯示已經設定完成,此時專案內也會出現一個.vscode的資料夾,其中有一份tasks.json,內容就是我們剛剛設定的相關參數
接著我們先打開kubernetes上的service ip看看
接著本地執行docker 設定首頁,後面我修改成456
然後回到vs code 選擇tasks.json 然後到上方的terminal 下拉選擇run tasks
接著就會開始執行橋接導流工作,工作原理是會將原本的nginx containers替換掉,將流量導流到本地,並且同namespace內的其他service也會被接至本地虛擬ip上,讓本地的服務也可以連接上其他的service
然後我們再回去打開剛剛kubernetes上的service ip
然後去檢查本地的docker log
到目前已經確認將kubernetes上的nginx導流至本地了,但官方文件說明這個只適用於單一Pod的服務,所以以方便性來看,只能算克難的使用,只能等看看telepresence 2.0是否能如期推出windows的版本了
然後如果要中斷導流,在vs code下方有個cluster的連接符號,像是天線的那個,點開他
選擇Disconnect current session 即可中斷導流,讓kubernetes的導流恢復正常
最後分析一下優缺點,優點是windows可以使用,linux與mac有更好用的telepresence,缺點的話,只適用於單一pod的服務,並且如果有跨namespace的其他服務,是無法被連接到的,telepresence反而比較可以適用整套cluster的導流,如果非windows不可的話,才建議使用bridge to kubernetes,因為沒得選…
參考資料
GKE 啟用CSI之後,可以針對相關的Class型態進行Snapshot設定,直接對PVC進行備份,並在日後可以直接還原使用
首先先設置csi使用的class,使用預設也可,但預設需要掛載在pod上才會創建對應的磁區,這裡為了展示所以使用自定義的class
vi csi-class.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: csi-pd
provisioner: pd.csi.storage.gke.io
volumeBindingMode: Immediate
allowVolumeExpansion: true
parameters:
type: pd-balanced
kubectla apply -f csi-class.yaml
接著建立PVC
vi ftp-volume.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: ftp-volume
namespace: ftp
spec:
storageClassName: csi-pd
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
kubectl apply -f ftp-volume.yaml
接著開始設定snapshot class
vi snapshot-class.yaml
apiVersion: snapshot.storage.k8s.io/v1beta1
kind: VolumeSnapshotClass
metadata:
name: snapshot-class
driver: pd.csi.storage.gke.io
deletionPolicy: Delete
kubectl apply -f snapshot-class.yaml
然後就可以開始進行備份的設定
vi ftp-snapshot.yaml
apiVersion: snapshot.storage.k8s.io/v1beta1
kind: VolumeSnapshot
metadata:
name: ftp-snapshot
namespace: ftp
spec:
volumeSnapshotClassName: snapshot-class
source:
persistentVolumeClaimName: ftp-volume
kubectl apply -f ftp-snapshot.yaml
這時就會開始進行snapshot,接著可以查詢是否已經備份
kubectl get volumesnapshotcontents -n ftp
NAME AGE
snapcontent-02628a1a-a89c-4255-9a40-0fccbfc4bc5d 6s
接著可以確認是snapshot是否可以使用
kubectl get volumesnapshot -n ftp \
-o custom-columns='NAME:.metadata.name,READY:.status.readyToUse'
當顯示 READY為True時,代表此snapshot已經完成,並可以使用
NAME READY
ftp-snapshot true
接著將snapshot設置還原為PVC
vi back-to-pvc.yam
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: ftp-bcakup
namespace: ftp
spec:
dataSource:
name: ftp-snapshot
kind: VolumeSnapshot
apiGroup: snapshot.storage.k8s.io
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
kubectl apply -f back-to-pvc.yaml
然後查詢PVC
kubectl get pvc -n ftp
看到出現PVC就代表還原完成,可以掛載給pod使用了
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
ftp-bcakup Bound pvc-78dca4d4-905f-4111-a2f2-283aa33d829e 100Gi RWO standard 36s
ftp-volume Bound pvc-bbd19786-7b92-4b35-877f-e48aedb92ba8 100Gi RWO csi-pd 16m
最近在建置Kubernetes上的DB時,研究著如何進行災難復原然後摸索出了設定的流程
1.GKE啟用 Compute Engine 永久磁碟 CSI 驅動程式
2.找到DB PVC對應的硬碟,並複製,下圖我將300G的磁碟複製成另一顆sqlserver-copy
3.設定新的PV & PVC 將剛剛複製的硬碟設定至GKE讓Pod可以掛載
apiVersion: v1
kind: PersistentVolume
metadata:
name: sqlserver-volume-pv
namespace: sqlserver
spec:
persistentVolumeReclaimPolicy: Delete
storageClassName: ""
capacity:
storage: 300G
accessModes:
- ReadWriteOnce
claimRef:
namespace: sqlserver
name: sqlserver-volume-pvc
gcePersistentDisk:
pdName: sqlserver-copy
fsType: ext4
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: sqlserver-volume-pvc
namespace: sqlserver
spec:
storageClassName: ""
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 300G
4.啟動新的sqlserver服務,並設定pvc為上一步驟製作的名稱
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: sqlserver-sts
namespace: sqlserver
spec:
serviceName: sqlserver-svc
replicas: 1
selector:
matchLabels:
app: ms-sqlserver
template:
metadata:
labels:
app: ms-sqlserver
spec:
terminationGracePeriodSeconds: 10
securityContext:
fsGroup: 10001
containers:
- name: ms-sqlserver
image: mcr.microsoft.com/mssql/server:2019-latest
ports:
- containerPort: 1433
resources:
requests:
cpu: 2
memory: 6Gi
env:
- name: MSSQL_PID
value: "Developer"
- name: ACCEPT_EULA
value: "Y"
- name: MSSQL_COLLATION
value: "Chinese_Taiwan_Stroke_CI_AS"
- name: MSSQL_AGENT_ENABLED
value: "true"
- name: SA_PASSWORD
valueFrom:
secretKeyRef:
name: sqlserver-secret
key: SA_PASSWORD
volumeMounts:
- name: sqlserver-volume
mountPath: /var/opt/mssql
volumes:
- name: sqlserver-volume
persistentVolumeClaim:
claimName: sqlserver-volume-pvc
5.檢查相關設定是否正常,以及檢查兩台DB內容是否相同
參考資料
Hi,各位瀏覽部落格的同好們
小弟目前已開始著手進行教育訓練課程的接案
目前已經有實際試上過幾個案例
有企業內訓、一對一上課等等
也大概了解到想特別上課的,往往需要的不是業界籠統的課程
講白了就是有什麼問題?要怎麼解決?能不能用等等之類的實際心得
所以目前小弟開的課程內容著重於『實務應用經驗』『使用中遇到的原廠不會跟你講的缺點』等等
比重比較偏向曾使用過,或是了解了但還在評估是否可以上線等目標族群
主要分為三類
1.AWS基礎&架構設計
2.GCP基礎&架構設計
3.Kubernetes on GCP(GKE)架構設計
第三項主要由於本身實務kubernetes都是在GCP上的經驗
基於課程分享的理念核心為實務經驗
所以只能分享GKE的實務經驗與心得
課程的收費方式會依照是否為企業內訓或是個人課程有所不同
然後依照需求提供課程內容,而非制式化照稿演講的模式
請有興趣的朋友可以來信洽詢 kilawang@kilait.com
另外相關技術交流也歡迎來信討論
這個架構其實是當初在AWS上實做出來的
我早期的部落格文章有提到,這邊就不多描述了
主要是現在GCP新增加了一個Cloud NAT的功能
可以讓理想中,不需要有對外IP的Server可以連接網際網路進行必要更新或版更
大致流程如下
如果沒有VPN tunnel 由辦公室建立內部網路連線
則多建立一台jumper server
建立兩台web server
由jumper server 走內部IP ssh 至兩台web (ssh go key 我就不多說了)
通了之後,建立一個 Cloud NAT
這時候沒有外部IP的兩台web server即可安裝nginx等套件
接著建立個負載平衡
掛上這兩台web
然後記得開個防火牆 80 port
收工
應用面上來說,只會暴露出負載平衡的IP
其餘全部的server沒有所謂的外部IP,沒有IP就沒有資安疑慮,完美!
GCP可以玩的花樣又更進一步了!
2018/07/4 更新
Google已道歉,並承諾改進
https://www.ithome.com.tw/news/124304
2018/07/3 更新
已上 ITHome 新聞
https://www.ithome.com.tw/news/124255
今天在GCP社群上看到轉貼一篇國外的文章
從後端社群上轉來的,關於Google AI判斷GCP用戶行為的後果
先不管消息目前的可信度,因為Reddit上連造假論都出來了…
這個事件先不管最後如何?實際可信度如何?
如果這個事件是真的
那GCP真的是給我三觀帶來無限的驚喜
『你的專案會被關掉』
只要Google的AI認為你的專案活動有異常
而且這個驚喜,Google不會通知你
社群上的文章如下
犯罪都還需要通知你出庭,讓法官判
沒通知就直接關
苦主的公司賠慘了
不多說了,原文連結在此
請各位看官自己評斷
畢竟我們不是當事者
中間過程發生甚麼我也不清楚
但沒有通知真的是有點….
也許AI不會通知吧XD
我真心希望GCP改掉任何以”技術主導“為主的服務核心
希望回到以”使用者需求“為主的服務價值
雖然AWS在很多時候也好不到哪
但是在對客戶的服務上,我是認為沒有話說
老是請使用者改掉,配合GCP的架構實作?真的沒人可以接受啦
看看對岸的討論文章 點我
如果一個人評論這個平台服務不好,應該是偏見
如果幾個人評論這個平台服務不好,也許是意見
如果多數人評論這個平台服務不好,那還需要說?
我相信一個有野心的雲平台是可以被質疑的,否則哪來的成長?
還是希望GCP可以越來越好,畢竟使用者不希望自己的平台
三天兩頭出狀況,誰都不想看到XD
最近用了GCP也十個月了
之前曾抱怨過GCP Cloud SQL在HA與MA的不良設計
現在再來說說其他的
正常在使用MySQL的時候,大多數時候都會依照一些經驗去調整參數
而之前在使用AWS RDS的時候也是如此
那問題來了
在Cloud SQL 上,能讓您調整的只有這些
https://cloud.google.com/sql/docs/mysql/flags
那我們來看看AWS RDS有哪些?
經歷了十個月多來的使用
以及與偉大的GCP業務端或SA端討論的結果
Cloud SQL 的開發團隊,不認為這有問題
(之前在HA與MA的狀況上,也是給我這一句話)
然後接下來的情況是
我們在不調效參數的情況下
Cloud SQL 會頻繁發生重啟
試問哪個公司的產品可以容許“資料庫不定時重啟“?
如果有,Cloud SQL絕對很適合你們,包你重開到high起來
我們正在嘗試解決的方式,自己使用GCE建置MySQL
原因很簡單,沒有其他解法了
GCP並不像RDS那樣還有其他MySQL資料庫選擇(MariaDB,Aurora)
所以嚴格來說,Cloud SQL是一個非常不成熟的資料庫產品
我們目前驗證到現在
Cloud SQL的預設參數調效,除了連線數設置為4000以外
其餘設定皆與在Linux Server 上安裝MySQL 預設設定一模一樣
講白話一點就是,他說有幫你做最佳調校,但實際上沒有
我們是撈資料庫參數出來看的,一比對就知道
這時候想起業務講過的話
Cloud SQL 就好像一台傻瓜相機,不適合你們進階玩家使用
那各位進階玩家們,這牌子的相機不好用,那下一步各位自己評估吧
另外我想澄清一點,Cloud SQL不是不能用
普通用途可以,重要性很高的話,還是不要考慮
請參考我前面跟Cloud SQL相關的文章再自行評估
不能調效、HA與MA不適用,我想不出他剩下的優點在哪了?
可能只有代管、備份這件事了…
© 2024 Kila's IT Home
Theme by Anders Norén — Up ↑
近期留言