අපි Kubernetes වෙත Canary යෙදවීම් ක්රියාත්මක කිරීමට k8s-native Argo Rollouts යෙදවුම් පාලකය සහ GitlabCI භාවිතා කරන්නෙමු.
මෙම ලිපි මාලාවේ ලිපි
Kubernetes #1 හි කැනරි යෙදවීම: Gitlab CI - (මෙම ලිපිය)
- Istio භාවිතයෙන් කැනරි යෙදවීම
- Jenkins-X Istio Flagger භාවිතයෙන් කැනරි යෙදවීම
කැනරි යෙදවීම
ඔබ කියවනු ඇතැයි අපි බලාපොරොත්තු වෙමු
Argo Rollouts
Argo Rollouts යනු Kubernetes දේශීය යෙදවුම් පාලකයකි. එය Kubernetes සඳහා CRD (අභිරුචි සම්පත් අර්ථ දැක්වීම) සපයයි. එයට ස්තූතියි, අපට නව ආයතනයක් භාවිතා කළ හැකිය: Rollout
, විවිධ වින්යාස විකල්ප සමඟ නිල්-කොළ සහ කැනරි යෙදවීම් කළමනාකරණය කරයි.
අභිරුචි සම්පතක් භාවිතා කරන Argo Rollouts පාලකය
Rollout,
Kubernetes සඳහා නිල්-කොළ සහ කැනරි වැනි අතිරේක යෙදවීමේ උපාය මාර්ග සඳහා ඉඩ ලබා දේ. සම්පත්Rollout
ක්රියාකාරීත්වය සමාන සපයයිDeployment
, අතිරේක යෙදවීමේ උපාය මාර්ග සමඟ පමණි.
සම්පත්Deployments
යෙදවීම සඳහා උපාය මාර්ග දෙකක් ඇත:RollingUpdate
иRecreate
. මෙම උපාය මාර්ග බොහෝ අවස්ථාවන් සඳහා සුදුසු වුවද, ඉතා විශාල පරිමාණයෙන් සේවාදායකයන් වෙත යෙදවීම සඳහා, විහිදුම් පාලකයෙහි නොමැති නිල්-කොළ හෝ කැනරි වැනි අතිරේක උපාය මාර්ග භාවිතා කරනු ලැබේ. Kubernetes හි මෙම උපක්රම භාවිතා කිරීමට, පරිශීලකයින්ට ඔවුන්ගේ යෙදවීම් මත ස්ක්රිප්ට් ලිවීමට සිදු විය. Argo Rollouts Controller මෙම උපාය මාර්ග සරල, ප්රකාශන, වින්යාසගත කළ හැකි පරාමිති ලෙස හෙලිදරව් කරයි.
https://argoproj.github.io/argo-rollouts
Rollouts සමඟ භාවිතා කිරීම සඳහා පහසු වෙබ් අතුරු මුහුණතක් සපයන Argo CI ද ඇත, අපි එය ඊළඟ ලිපියෙන් බලමු.
Argo Rollouts ස්ථාපනය කිරීම
සේවාදායක පැත්ත
kubectl create namespace argo-rolloutskubectl apply -n argo-rollouts -f https://raw.githubusercontent.com/argoproj/argo-rollouts/stable/manifests/install.yaml
අපගේ යටිතල පහසුකම් turnip හි (පහත බලන්න) අපි දැනටමත් install.yaml i/k8s/argo-rollouts/install.yaml ලෙස එකතු කර ඇත. මේ ආකාරයට GitlabCI එය පොකුරට ස්ථාපනය කරයි.
සේවාලාභී පැත්ත (kubectl ප්ලගිනය)
උදාහරණ යෙදුම
යෙදුම් කේතය සහ යටිතල පහසුකම් සඳහා වෙනම ගබඩාවන් තිබීම හොඳ පුරුද්දකි.
යෙදුම සඳහා ගබඩාව
Kim Wuestkamp/k8s-deployment-example-app
මෙය JSON ලෙස ප්රතිචාරයක් ලබා දෙන ඉතා සරල Python+Flask API එකකි. අපි GitlabCI භාවිතයෙන් පැකේජය ගොඩනඟා ප්රතිඵලය Gitlab Registry වෙත තල්ලු කරන්නෙමු. රෙජිස්ට්රි තුළ අපට විවිධ නිකුතු අනුවාද දෙකක් තිබේ:
- wuestkamp/k8s-deployment-example-app:v1
- wuestkamp/k8s-deployment-example-app:v2
ඔවුන් අතර ඇති එකම වෙනස JSON ගොනුව ආපසු ලබා දීමයි. අප සන්නිවේදනය කරන්නේ කුමන අනුවාදයද යන්න හැකි තරම් පහසුවෙන් දෘශ්යමාන කිරීමට අපි මෙම යෙදුම භාවිතා කරමු.
යටිතල පහසුකම් ගබඩාව
මෙම ගබඩාව තුළ අපි Kubernetes වෙත යෙදවීම සඳහා GitlabCI භාවිතා කරන්නෙමු, .gitlab-ci.yml පෙනෙන්නේ මෙයයි:
image: traherom/kustomize-dockerbefore_script:
- printenv
- kubectl versionstages:
- deploydeploy test:
stage: deploy
before_script:
- echo $KUBECONFIG
script:
- kubectl get all
- kubectl apply -f i/k8s only:
- master
එය ඔබම ක්රියාත්මක කිරීමට ඔබට පොකුරක් අවශ්ය වනු ඇත, ඔබට Gcloud භාවිතා කළ හැකිය:
gcloud container clusters create canary --num-nodes 3 --zone europe-west3-b
gcloud compute firewall-rules create incoming-80 --allow tcp:80
ඔබ ගෑරුප්පු කිරීමට අවශ්යයි KUBECONFIG
GitlabCI හි, ප්රවේශය සඳහා වින්යාසය අඩංගු වේ kubectl
ඔබේ පොකුරට.
යටිතල පහසුකම් Yaml
යටිතල පහසුකම් ගබඩාව තුළ අපට සේවාව ඇත:
apiVersion: v1
kind: Service
metadata:
labels:
id: rollout-canary
name: app
spec:
ports:
- port: 80
protocol: TCP
targetPort: 5000
selector:
id: app
type: LoadBalancer
සහ rollout.yaml:
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: rollout-canary
spec:
replicas: 10
revisionHistoryLimit: 2
selector:
matchLabels:
id: rollout-canary
template:
metadata:
labels:
id: rollout-canary
spec:
containers:
- name: rollouts-demo
image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v1
imagePullPolicy: Always
strategy:
canary:
steps:
- setWeight: 10
# Rollouts can be manually resumed by running `kubectl argo rollouts promote ROLLOUT`
- pause: {}
- setWeight: 50
- pause: { duration: 120 } # two minutes
Rollout
Deployment ලෙසම ක්රියා කරයි. අපි යාවත්කාලීන උපාය මාර්ගයක් සකසා නොමැති නම් (මෙහි කැනරි වැනි) එය පෙරනිමි rolling-update Deployment ලෙස ක්රියා කරයි.
අපි කැනරි යෙදවීම සඳහා yaml වලින් පියවර දෙකක් නිර්වචනය කරමු:
- කැනරි වෙත ගමනාගමනයෙන් 10% (අත්පොත හරි සඳහා රැඳී සිටින්න)
- කැනරි වෙත 50% තදබදයක් (විනාඩි 2 ක් රැඳී සිට 100% දක්වා ඉදිරියට යන්න)
මූලික යෙදවීම සිදු කිරීම
මූලික යෙදවීමෙන් පසුව, අපගේ සම්පත් මේ ආකාරයෙන් පෙනෙනු ඇත:
තවද අපට ප්රතිචාරයක් ලැබෙන්නේ යෙදුමේ පළමු අනුවාදයෙන් පමණි:
කැනරි යෙදවීම සිදු කිරීම
පියවර 1: 10% තදබදය
කැනරි යෙදවීම ආරම්භ කිරීම සඳහා, අපි සාමාන්යයෙන් යෙදවීම් සමඟ කරන ආකාරයටම අපට රූප අනුවාදය වෙනස් කිරීමට අවශ්ය වේ:
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: rollout-canary
spec:
...
template:
metadata:
labels:
id: rollout-canary
spec:
containers:
- name: rollouts-demo
image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v2
...
අපි වෙනස්කම් තල්ලු කරන්නෙමු, එබැවින් Gitlab CI යොදවන අතර අපි වෙනස්කම් දකිමු:
දැන් අපි සේවාවට පිවිසෙන්නේ නම්:
මහා! අපි අපේ කැනරි යෙදවීම මැද. ධාවනය කිරීමෙන් අපට ප්රගතිය දැකිය හැකිය:
kubectl argo rollouts get rollout rollout-canary
පියවර 2: 50% තදබදය:
දැන් අපි ඊළඟ පියවරට යමු: ගමනාගමනයෙන් 50% යළි හරවා යැවීම. අපි මෙම පියවර අතින් ක්රියාත්මක කිරීමට වින්යාස කළෙමු:
kubectl argo rollouts promote rollout-canary # continue to step 2
අපගේ යෙදුම නව අනුවාද වලින් ප්රතිචාර වලින් 50% ක් ලබා දුන්නේය:
සහ විකාශනය සමාලෝචනය:
ප්රෙක්රාස්නෝ.
පියවර 3: 100% තදබදය:
මිනිත්තු 2 කට පසු 50% පියවර ස්වයංක්රීයව අවසන් වන අතර 100% පියවර ආරම්භ වන පරිදි අපි එය සකස් කරමු:
සහ යෙදුම් ප්රතිදානය:
සහ විකාශනය සමාලෝචනය:
කැනරි යෙදවීම සම්පූර්ණයි.
Argo Rollouts සමඟ තවත් උදාහරණ
කැනරි මත පදනම්ව පරිසර පෙරදසුන් සහ සැසඳීම් පිහිටුවන ආකාරය වැනි තවත් උදාහරණ මෙහි ඇත:
Argo Rollouts සහ Argo CI පිළිබඳ වීඩියෝව
මම ඇත්තටම මෙම වීඩියෝව නිර්දේශ කරමි, එය Argo Rollouts සහ Argo CI එකට වැඩ කරන ආකාරය පෙන්වයි:
ප්රතිඵලය
අතිරේක ආකාරයේ යෙදවුම් හෝ අනුරූ නිර්මාණය කිරීම, ගමනාගමනය යළි-යොමු කිරීම් යනාදිය කළමනාකරණය කරන CRDs භාවිතා කිරීමේ අදහසට මම ඇත්තෙන්ම කැමතියි. ඔවුන් සමඟ වැඩ කිරීම සුමටව සිදු වේ. ඊළඟට මම Argo CI සමඟ ඒකාබද්ධ කිරීම පරීක්ෂා කිරීමට කැමතියි.
කෙසේ වෙතත්, Argo CI සහ Flux CI විශාල ඒකාබද්ධ කිරීමක් ඇති බව පෙනේ, එබැවින් නව නිකුතුව නිකුත් වන තෙක් මම බලා සිටිය හැකිය:
ඔබට Argo Rollouts හෝ Argo CI සමඟ අත්දැකීම් තිබේද?
අපගේ බ්ලොග් අඩවියේ වෙනත් ලිපිද කියවන්න:
Nginx වෙබ් සේවාදායකය සමඟ වසන්ත යෙදුම් නිල්-කොළ යෙදවීම Kubernetes: පද්ධති සම්පත් කළමනාකරණය පිහිටුවීම එතරම් වැදගත් වන්නේ ඇයි? Hashicorp Consul's Kubernetes Authorization හැඳින්වීම ටෙක්ටන් නල මාර්ගය - Kubernetes-දේශීය නල මාර්ග Nginx සඳහා ගතික මොඩියුල ගොඩනැගීම Redmine සඳහා Telegram bot. ඔබ සහ අන් අය සඳහා ජීවිතය සරල කරන්නේ කෙසේද?
මූලාශ්රය: www.habr.com