හෙලෝ, හබ්ර්!
ගිම්හානය අවසානයේ, අපි මාතෘකාව මත දිගටම වැඩ කරන බව ඔබට මතක් කිරීමට අවශ්යයි
කියවන්න කියවන්න!
මෙම ලිපිය ලියන අවස්ථාව වන විට කුබර්නෙටස්ගේ වයස දළ වශයෙන් වේ.
Linux හි ක්රියාවලි හුදකලා කිරීම සඳහා විශේෂ සැලසුමක් ලෙස බහාලුම් ආරම්භ විය; 2007 සිට බහාලුම් ඇතුළත් කර ඇත
Kubernetes මෙතරම් ජනප්රිය වන්නේ මන්දැයි තේරුම් ගැනීමට, අපි ප්රශ්න කිහිපයකට පිළිතුරු දීමට උත්සාහ කරමු. නිෂ්පාදනය සඳහා යෙදුම් යෙදවිය යුතු ආකාරය පිළිබඳව අවසන් වරට සංවර්ධකයින්ට එකඟ වීමට හැකි වූයේ කවදාද? මෙවලම් පෙට්ටියෙන් පිටත ලබා දී ඇති බැවින් ඒවා භාවිතා කරන සංවර්ධකයින් කී දෙනෙක් ඔබ දන්නවාද? යෙදුම් ක්රියා කරන ආකාරය නොතේරෙන ක්ලවුඩ් පරිපාලකයින් කී දෙනෙක් අද සිටිනවාද? මෙම ප්රශ්නවලට පිළිතුරු අපි මෙම ලිපියෙන් බලමු.
යටිතල පහසුකම් YAML ලෙස
Puppet සහ Chef සිට Kubernetes දක්වා ගිය ලෝකයේ, විශාලතම වෙනස්කම් වලින් එකක් වූයේ "කේතය ලෙස යටිතල පහසුකම්" සිට "යටිතල පහසුකම් දත්ත ලෙස" දක්වා-විශේෂයෙන්, YAML වැනි. Kubernetes හි ඇති සියලුම සම්පත්, කරල්, වින්යාස කිරීම්, යෙදවූ අවස්ථා, වෙළුම් යනාදිය, YAML ගොනුවකින් පහසුවෙන් විස්තර කළ හැක. උදාහරණ වශයෙන්:
apiVersion: v1
kind: Pod
metadata:
name: site
labels:
app: web
spec:
containers:
- name: front-end
image: nginx
ports:
- containerPort: 80
මෙම දර්ශනය DevOps හෝ SRE වෘත්තිකයන්ට පයිතන් හෝ ජාවාස්ක්රිප්ට් වැනි භාෂාවලින් කේත ලිවීමකින් තොරව ඔවුන්ගේ වැඩ බර සම්පූර්ණයෙන්ම ප්රකාශ කිරීමට පහසු කරයි.
දත්ත ලෙස යටිතල පහසුකම් සංවිධානය කිරීමේ අනෙකුත් වාසිවලට ඇතුළත් වන්නේ:
- GitOps හෝ Git මෙහෙයුම් අනුවාද පාලනය. මෙම ප්රවේශය ඔබට සියලුම Kubernetes YAML ගොනු git ගබඩාවල තබා ගැනීමට ඉඩ සලසයි, එවිට ඔබට වෙනසක් සිදු කළේ කවදාද, එය කළේ කවුරුන්ද සහ හරියටම වෙනස් වූ දේ නිරීක්ෂණය කළ හැකිය. මෙමගින් ආයතනය පුරා ක්රියාකාරීත්වයේ විනිවිද භාවය වැඩි කරන අතර, විශේෂයෙන්ම සේවකයින් ඔවුන්ට අවශ්ය සම්පත් සෙවිය යුතු තැන්වල අපැහැදිලි බව දුරුකරමින් මෙහෙයුම් කාර්යක්ෂමතාව වැඩි දියුණු කරයි. ඒ අතරම, හුදෙක් ඇදීමේ ඉල්ලීමක් ඒකාබද්ධ කිරීමෙන් Kubernetes සම්පත් වෙත ස්වයංක්රීයව වෙනස්කම් සිදු කිරීම පහසු වේ.
- පරිමාණය. සම්පත් YAML ලෙස නිර්වචනය කළ විට, පොකුරු ක්රියාකරුවන්ට Kubernetes සම්පතක අංක එකක් හෝ දෙකක් වෙනස් කිරීම අතිශය පහසු වන අතර එමඟින් එය පරිමාණය වන ආකාරය වෙනස් වේ. Kubernetes කරල්වල තිරස් ස්වයං පරිමාණය සඳහා යාන්ත්රණයක් සපයන අතර, අඩු සහ ඉහළ මට්ටමේ ගමනාගමනය හැසිරවීමට විශේෂිත යෙදවුම් වින්යාසයකදී අවශ්ය අවම සහ උපරිම කරල් සංඛ්යාව කුමක්දැයි පහසුවෙන් තීරණය කිරීමට භාවිතා කළ හැක. උදාහරණයක් ලෙස, ඔබ හදිසි තදබදයක් හේතුවෙන් අමතර ධාරිතාවක් අවශ්ය වින්යාසයක් යොදවා ඇත්නම්, maxReplicas 10 සිට 20 දක්වා වෙනස් කළ හැක:
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: myapp
namespace: default
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: myapp-deployment
minReplicas: 1
maxReplicas: 20
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
- ආරක්ෂාව සහ කළමනාකරණය. Kubernetes හි දේවල් යොදවා ඇති ආකාරය ඇගයීමට YAML විශිෂ්ටයි. උදාහරණයක් ලෙස, ඔබගේ කාර්ය භාරය පරිපාලක නොවන පරිශීලකයෙකු ලෙස ක්රියාත්මක වන්නේද යන්න ප්රධාන ආරක්ෂක ගැටළුවක් වේ. මෙම අවස්ථාවේදී, අපට වැනි මෙවලම් අවශ්ය විය හැකිය
ගැටුම , YAML/JSON වලංගුකාරකය, ප්ලස්විවෘත ප්රතිපත්ති නියෝජිතයා , සන්දර්භය සහතික කිරීම සඳහා ප්රතිපත්ති වලංගුකාරකයකිආරක්ෂක සන්දර්භය පරිපාලක වරප්රසාද සහිතව කන්ටේනරය ක්රියාත්මක වීමට ඔබගේ කාර්ය භාරය ඉඩ නොදේ. මෙය අවශ්ය නම්, පරිශීලකයින්ට සරල ප්රතිපත්තියක් යෙදිය හැකඅගල් , මෙවැනි:
package main
deny[msg] {
input.kind = "Deployment"
not input.spec.template.spec.securityContext.runAsNonRoot = true
msg = "Containers must not run as root"
}
- වලාකුළු සපයන්නා සමඟ ඒකාබද්ධ කිරීම සඳහා විකල්ප. වර්තමාන උසස් තාක්ෂණයේ වඩාත්ම කැපී පෙනෙන ප්රවණතාවක් වන්නේ පොදු වලාකුළු සපයන්නන් මත වැඩ බර ක්රියාත්මක කිරීමයි. සංරචකය භාවිතා කිරීම
වලාකුළු සපයන්නා Kubernetes ඕනෑම පොකුරකට එය ක්රියාත්මක වන වලාකුළු සපයන්නා සමඟ ඒකාබද්ධ වීමට ඉඩ දෙයි. උදාහරණයක් ලෙස, පරිශීලකයෙකු AWS හි Kubernetes හි යෙදුමක් ධාවනය කරන්නේ නම් සහ සේවාවක් හරහා එම යෙදුම හෙළිදරව් කිරීමට අවශ්ය නම්, ක්ලවුඩ් සපයන්නා ස්වයංක්රීයව සේවාව නිර්මාණය කිරීමට උදවු කරයිLoadBalancer
ස්වයංක්රීයව පැටවුම් ශේෂය සපයනු ඇතAmazon Elastic Load Balancer යෙදුම් පොඩ් වෙත ගමනාගමනය හරවා යැවීමට.
පුළුල් කිරීමේ හැකියාව
Kubernetes ඉතා පුළුල් වන අතර සංවර්ධකයින් එයට කැමතියි. කරල්, යෙදවීම්, වැනි පවතින සම්පත් සමූහයක් ඇත StatefulSets
, රහස්, ConfigMaps
, ආදිය. ඇත්ත, පරිශීලකයින්ට සහ සංවර්ධකයින්ට පෝරමයට වෙනත් සම්පත් එකතු කළ හැකිය
උදාහරණයක් ලෙස, අපට සම්පතක් අර්ථ දැක්වීමට අවශ්ය නම් CronTab
, එවිට ඔබට මෙවැනි දෙයක් කළ හැකිය:
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: crontabs.my.org
spec:
group: my.org
versions:
- name: v1
served: true
storage: true
Schema:
openAPIV3Schema:
type: object
properties:
spec:
type: object
properties:
cronSpec:
type: string
pattern: '^(d+|*)(/d+)?(s+(d+|*)(/d+)?){4}$'
replicas:
type: integer
minimum: 1
maximum: 10
scope: Namespaced
names:
plural: crontabs
singular: crontab
kind: CronTab
shortNames:
- ct
පසුව අපට මෙවැනි දෙයක් CronTab සම්පතක් නිර්මාණය කළ හැකිය:
apiVersion: "my.org/v1"
kind: CronTab
metadata:
name: my-cron-object
spec:
cronSpec: "* * * * */5"
image: my-cron-image
replicas: 5
Kubernetes හි විස්තාරණය සඳහා තවත් විකල්පයක් වන්නේ සංවර්ධකයාට තමාගේම ප්රකාශයන් ලිවිය හැකි බවයි.
සංවර්ධකයින්ට ඔවුන්ගේම ක්රියාකරුවන් නිර්මාණය කිරීම පහසු කරන මෙවලම් කිහිපයක් ප්රජාව තුළ ඇත. ඒ අය අතරින් -
$ operator-sdk new my-operator --repo github.com/myuser/my-operator
මෙය YAML ගොනු සහ Golang කේතය ඇතුළුව ඔබේ ක්රියාකරු සඳහා සියලුම බොයිලේරු තහඩු කේතය නිර්මාණය කරයි:
.
|____cmd
| |____manager
| | |____main.go
|____go.mod
|____deploy
| |____role.yaml
| |____role_binding.yaml
| |____service_account.yaml
| |____operator.yaml
|____tools.go
|____go.sum
|____.gitignore
|____version
| |____version.go
|____build
| |____bin
| | |____user_setup
| | |____entrypoint
| |____Dockerfile
|____pkg
| |____apis
| | |____apis.go
| |____controller
| | |____controller.go
එවිට ඔබට අවශ්ය API සහ පාලකය එකතු කළ හැක, මේ වගේ:
$ operator-sdk add api --api-version=myapp.com/v1alpha1 --kind=MyAppService
$ operator-sdk add controller --api-version=myapp.com/v1alpha1 --kind=MyAppService
ඉන්පසුව, අවසාන වශයෙන්, ක්රියාකරු එකලස් කර එය ඔබේ බහාලුම් ලේඛනයට යවන්න:
$ operator-sdk build your.container.registry/youruser/myapp-operator
සංවර්ධකයාට ඊටත් වඩා පාලනයක් අවශ්ය නම්, Go ගොනු වල බොයිලේරු ප්ලේට් කේතය වෙනස් කළ හැක. උදාහරණයක් ලෙස, පාලකයේ විශේෂතා වෙනස් කිරීම සඳහා, ඔබට ගොනුවේ වෙනස්කම් සිදු කළ හැකිය controller.go
.
තවත් ව්යාපෘතියක්
$ kubectl kudo install zookeeper
$ kubectl kudo install kafka
ඉන්පසු එය වෙනත් විධානයකින් වින්යාස කරන්න:
$ kubectl kudo install kafka --instance=my-kafka-name
-p ZOOKEEPER_URI=zk-zookeeper-0.zk-hs:2181
-p ZOOKEEPER_PATH=/my-path -p BROKER_CPUS=3000m
-p BROKER_COUNT=5 -p BROKER_MEM=4096m
-p DISK_SIZE=40Gi -p MIN_INSYNC_REPLICAS=3
-p NUM_NETWORK_THREADS=10 -p NUM_IO_THREADS=20
නවෝත්පාදනය
පසුගිය වසර කිහිපය තුළ, ප්රධාන Kubernetes නිකුතු සෑම මාස කිහිපයකට වරක් නිකුත් වෙමින් පවතී - එනම්, වසරකට ප්රධාන නිකුතු තුනක් හෝ හතරක්. ඒ එකින් එක හඳුන්වා දෙන අලුත් විශේෂාංග ගණන අඩු වෙන්නේ නැහැ. එපමණක්ද නොව, මෙම දුෂ්කර කාලවලදී පවා මන්දගාමී වීමේ ලකුණු නොමැත - දැන් තත්වය කුමක්දැයි බලන්න
විවිධ කාර්ය භාරයන් හරහා වඩාත් නම්යශීලීව පොකුරු මෙහෙයුම් කිරීමට නව හැකියාවන් ඔබට ඉඩ සලසයි. ඊට අමතරව, යෙදුම් සෘජුවම නිෂ්පාදනයට යෙදවීමේදී ක්රමලේඛකයින් වැඩි පාලනයක් භුක්ති විඳිති.
ප්රජාව
කුබර්නෙට්ස්ගේ ජනප්රියත්වයේ තවත් ප්රධාන අංගයක් වන්නේ එහි ප්රජාවේ ශක්තියයි. 2015 දී, 1.0 අනුවාදයට ළඟා වූ පසු, Kubernetes විසින් අනුග්රහය දක්වන ලදී
විවිධ ප්රජාවන් ද ඇත
Cloud Native පදනම විසින් CloudNativeCon/KubeCon සත්කාරකත්වය දරයි, එය ලියන අවස්ථාව වන විට, ලොව විශාලතම විවෘත මූලාශ්ර සම්මන්ත්රණය වේ. සාමාන්යයෙන් වසරකට තුන් වතාවක් පවත්වනු ලබන, එය Kubernetes සහ එහි පරිසර පද්ධතිය වැඩිදියුණු කිරීමට මෙන්ම සෑම මාස තුනකට වරක් දිස්වන නව විශේෂාංග ඉගෙන ගැනීමට කැමති දහස් ගණනක් වෘත්තිකයන් එක් කරයි.
එපමණක් නොව, Cloud Native පදනම සතුව ඇත
අවසාන වශයෙන්, මිනිසුන් එකට බැඳී සිටින නමුත් ඒ සමඟම නවකයින් කණ්ඩායමට සාදරයෙන් පිළිගන්නා සමස්ත ප්රජාවගේ සවිඥානික උත්සාහයකින් තොරව Kubernetes තරම් සාර්ථක නොවනු ඇතැයි මම විශ්වාස කරමි.
අනාගතය
සංවර්ධකයින්ට අනාගතයේදී මුහුණ දීමට සිදුවනු ඇති ප්රධාන අභියෝගයක් වන්නේ එය ක්රියාත්මක වන යටිතල පහසුකම් කෙරෙහි නොව, කේතයේ විස්තර කෙරෙහි අවධානය යොමු කිරීමේ හැකියාවයි. එය මෙම ප්රවණතා සපුරාලයි
මෙම ලිපියෙන් අපි සීරීමට ලක් කළේ වර්තමාන කුබර්නෙටස් රාජ්යයේ මතුපිට පමණි - ඇත්ත වශයෙන්ම එය අයිස් කුට්ටියේ කෙළවර පමණි. Kubernetes පරිශීලකයින්ට වෙනත් බොහෝ සම්පත්, හැකියාවන් සහ වින්යාසයන් ඔවුන් සතුව ඇත.
මූලාශ්රය: www.habr.com