How to use yaml configuraiton files؟
یکی از مهمترین ابزارها در کار با داکر و کیوب (kubernetes) که باید تا حد خوبی بلد باشید و در این پست میخواهیم به صورت مقدماتی بهش بپردازیم اینه : ساختن فایلهای پیکربندی(configuration) به کمک YAML. به طور خاص میخواهیم نحوه ساختن pod و بعد از آن یک deployment را در kubernetes بررسی کنیم.
مقدمات
اول اینکه اگه بخواهید در زمینه نرمافزار کار انجام بدید، سخته که از yaml فرار کنید. اگه در یه جمله بخوایم بگیم yaml چیه؟ یک فرمت مبتنی بر متن خوانا برای مشخص کردن اطلاعات از جنس پیکربندی (configuration) است. بعنوان مثال همانطور که گفتیم، در این پست میخواهیم از تعاریف yaml برای تعریف کردن و ساختن اولین pod و سپس یک deploymenet استفاده کنیم.
استفاده از yaml برای تعریفکردن المانهای کیوب، مزایای زیادی دارد. از آن جمله میتوان به :
- convenience : نیازی به زدن همه پارامترها در ترمینال نیست
- maintenance : میتونه به source control اضافه بشه. بنابراین میتونه تغییراتش رو متوجه بشید
- flexibility : ساختارهای بسیار پیچیدهتری، نسبت به چیزی که با ترمینال میتونید بسازید، میتونید داشته باشید.
میشه گفت yaml یه superset از Json هست. این به این معنی است که هر فایل معتبر JSON یک فایل معتبر yaml نیز هست.
برای yaml نویسی، تنها دو ساختار ( و یا ترکیبی از این دو ) استفاده میشه :
- مپ (Maps)
- لیست (Lists)
--- apiVersion: v1 kind: Pod metadata: name: rss-site labels: app: web
--- apiVersion: v1 kind: Pod metadata: name: rss-site labels: app: web spec: containers: - name: front-end image: nginx ports: - containerPort: 80 - name: rss-reader image: nickchase/rss-php-nginx:v1 ports: - containerPort: 88
{ "apiVersion": "v1", "kind": "Pod", "metadata": { "name": "rss-site", "labels": { "app": "web" } }, "spec": { "containers": [{ "name": "front-end", "image": "nginx", "ports": [{ "containerPort": "80" }] }, { "name": "rss-reader", "image": "nickchase/rss-php-nginx:v1", "ports": [{ "containerPort": "88" }] }] } }برای جمعبندی فهمیدیم ساختارهای زیر قابل استفاده هستند :
- maps, which are groups of name-value pairs
- lists, which are individual items
- maps of maps
- maps of lists
- lists of lists
- lists of maps
apiVersion: v1 kind: Pod metadata: name: redis-django labels: app: web spec: containers: - name: key-value-store image: redis ports: - containerPort: 6379 - name: frontend image: django ports: - containerPort: 8000در ابتدا یک مپ apiVersion با مقدار v1 رو میبینید.( برای deployment باید یک apiVersion دیگه بزنیم چرا که برای اون v1 وجود نداره)
kubectl create secret docker-registry myregistrykey --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAILsecret "myregistrykey" created.