[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:tr:devops-cloud\u002Fk8s-config-secrets":4,"config":257},null,{"field_key":5,"field_name":6,"seniority":7,"topic_key":8,"topic_name":9,"spec_key":7,"spec_name":7,"locale":10,"cell_total":11,"field_total":12,"seniorities":13,"topics":17,"specs":151,"samples":171},"devops-cloud","DevOps \u002F Cloud","","k8s-config-secrets","K8s Config Secrets","tr",75,3375,[14,15,16],"junior","mid","senior",[18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84,87,88,91,94,97,100,103,106,109,112,115,118,121,124,127,130,133,136,139,142,145,148],{"key":19,"name":20,"count":11},"aws-compute-ec2-lambda","Aws Compute Ec2 Lambda",{"key":22,"name":23,"count":11},"aws-databases-rds-dynamodb","Aws Databases Rds Dynamodb",{"key":25,"name":26,"count":11},"aws-iam-security","Aws Iam Security",{"key":28,"name":29,"count":11},"aws-messaging-eventing","Aws Messaging Eventing",{"key":31,"name":32,"count":11},"aws-networking-vpc","Aws Networking Vpc",{"key":34,"name":35,"count":11},"aws-storage-s3-ebs","Aws Storage S3 Ebs",{"key":37,"name":38,"count":11},"azure-compute-vm-appservice","Azure Compute Vm Appservice",{"key":40,"name":41,"count":11},"azure-databases-sql-cosmosdb","Azure Databases Sql Cosmosdb",{"key":43,"name":44,"count":11},"azure-iam-security","Azure Iam Security",{"key":46,"name":47,"count":11},"azure-messaging-eventing","Azure Messaging Eventing",{"key":49,"name":50,"count":11},"azure-networking-vnet","Azure Networking Vnet",{"key":52,"name":53,"count":11},"azure-storage-blob-managed-disk","Azure Storage Blob Managed Disk",{"key":55,"name":56,"count":11},"ci-cd-pipelines","Ci Cd Pipelines",{"key":58,"name":59,"count":11},"cloud-architecture-scaling","Cloud Architecture Scaling",{"key":61,"name":62,"count":11},"containers-orchestration","Containers Orchestration",{"key":64,"name":65,"count":11},"deployment-release-strategies","Deployment Release Strategies",{"key":67,"name":68,"count":11},"gcp-compute-gce-cloudrun","Gcp Compute Gce Cloudrun",{"key":70,"name":71,"count":11},"gcp-databases-cloudsql-spanner-firestore","Gcp Databases Cloudsql Spanner Firestore",{"key":73,"name":74,"count":11},"gcp-iam-security","Gcp Iam Security",{"key":76,"name":77,"count":11},"gcp-messaging-eventing","Gcp Messaging Eventing",{"key":79,"name":80,"count":11},"gcp-networking-vpc","Gcp Networking Vpc",{"key":82,"name":83,"count":11},"gcp-storage-gcs-persistent-disk","Gcp Storage Gcs Persistent Disk",{"key":85,"name":86,"count":11},"infrastructure-as-code","Infrastructure As Code",{"key":8,"name":9,"count":11},{"key":89,"name":90,"count":11},"k8s-observability-troubleshooting","K8s Observability Troubleshooting",{"key":92,"name":93,"count":11},"k8s-scheduling-resources","K8s Scheduling Resources",{"key":95,"name":96,"count":11},"k8s-services-networking","K8s Services Networking",{"key":98,"name":99,"count":11},"k8s-storage","K8s Storage",{"key":101,"name":102,"count":11},"k8s-workloads","K8s Workloads",{"key":104,"name":105,"count":11},"linux-filesystem-permissions-links","Linux Filesystem Permissions Links",{"key":107,"name":108,"count":11},"linux-networking-tools-troubleshooting","Linux Networking Tools Troubleshooting",{"key":110,"name":111,"count":11},"linux-performance-monitoring-resource-limits","Linux Performance Monitoring Resource Limits",{"key":113,"name":114,"count":11},"linux-process-management-signals","Linux Process Management Signals",{"key":116,"name":117,"count":11},"linux-shell-scripting-ops-automation","Linux Shell Scripting Ops Automation",{"key":119,"name":120,"count":11},"linux-systemd-service-management","Linux Systemd Service Management",{"key":122,"name":123,"count":11},"networking-dns-loadbalancing","Networking Dns Loadbalancing",{"key":125,"name":126,"count":11},"observability-monitoring","Observability Monitoring",{"key":128,"name":129,"count":11},"reliability-incident-sre","Reliability Incident Sre",{"key":131,"name":132,"count":11},"security-iam-secrets","Security Iam Secrets",{"key":134,"name":135,"count":11},"terraform-hcl-language-expressions","Terraform Hcl Language Expressions",{"key":137,"name":138,"count":11},"terraform-modules-workspaces","Terraform Modules Workspaces",{"key":140,"name":141,"count":11},"terraform-plan-apply-drift-import","Terraform Plan Apply Drift Import",{"key":143,"name":144,"count":11},"terraform-providers-lifecycle-provisioners","Terraform Providers Lifecycle Provisioners",{"key":146,"name":147,"count":11},"terraform-state-backend-locking","Terraform State Backend Locking",{"key":149,"name":150,"count":11},"terraform-testing-policy-cicd","Terraform Testing Policy Cicd",[152,156,159,162,165,168],{"key":153,"name":154,"count":155},"aws","AWS",450,{"key":157,"name":158,"count":155},"azure","Azure",{"key":160,"name":161,"count":155},"gcp","GCP",{"key":163,"name":164,"count":155},"kubernetes","Kubernetes",{"key":166,"name":167,"count":155},"linux","Linux",{"key":169,"name":170,"count":155},"terraform","Terraform",[172,190,204,217,231,244],{"id":173,"topic":9,"difficulty":174,"body":175,"options":176,"correct_key":181,"explanation":189},"019f651a-7cee-7556-8fc7-632d3053455c",1,"Bir ConfigMap, Pod'un container'ına iki yaygın yolla sunulabilir. Onu ortam değişkeni olarak (`envFrom`\u002F`valueFrom.configMapKeyRef`) kullanmak ile volume olarak mount etmek arasındaki temel yapısal fark nedir?",[177,180,183,186],{"key":178,"text":179},"a","Ortam değişkenleri yalnızca sayısal değerlerde çalışır, volume'lar yalnızca metin değerlerinde çalışır",{"key":181,"text":182},"b","Env var'lar değerleri process ortamına enjekte eder; volume ise her key'i dosya olarak sunar",{"key":184,"text":185},"c","Env var'lar ayrı bir Secret nesnesi gerektirir, volume'lar ayrı bir ConfigMap nesnesi gerektirir",{"key":187,"text":188},"d","Ortam değişkenleri namespace'e özeldir, volume mount'lar cluster kapsamındadır","`envFrom`\u002F`valueFrom.configMapKeyRef`, ConfigMap'teki her key'i container'ın process ortamında bir ortam değişkeni olarak ayarlar. Aynı ConfigMap'i volume olarak mount etmek ise her key'in bir dosya haline geldiği, değerin de dosya içeriği olduğu bir dizin oluşturur. İkisi de aynı ConfigMap verisini referans alır, sadece farklı bir mekanizmayla ulaştırılır.",{"id":191,"topic":9,"difficulty":192,"body":193,"options":194,"correct_key":184,"explanation":203},"019f651a-7d04-7e39-bab7-291a57715e6a",2,"Çalışan bir Pod'daki container, ConfigMap `app-config`'ten `envFrom.configMapRef` ile ayarlanan `APP_MODE` ortam değişkenini okuyor. `app-config`'i `kubectl patch` ile güncelleyip `APP_MODE`'u `debug`'dan `production`'a değiştiriyorsun, iki dakika bekliyorsun, sonra container'a exec olup `$APP_MODE`'u yazdırıyorsun. Ne görürsün?",[195,197,199,201],{"key":178,"text":196},"`production`, çünkü kubelet ConfigMap değişikliklerinde container'ları her zaman yeniden başlatır",{"key":181,"text":198},"Boş bir değer, çünkü kaynak ConfigMap değiştiğinde container'ın ortamı temizlenir",{"key":184,"text":200},"Hâlâ `debug` — env var'lar container başlarken bir kez okunur, ConfigMap değişikliklerinde yeniden enjekte edilmez",{"key":187,"text":202},"`production`, çünkü ortam değişkenleri her process syscall'ında ConfigMap'ten yeniden okunur","ConfigMap'ten gelen ortam değişkenleri yalnızca container process'i başlarken bir kez çözümlenir. Kubernetes'in hâlihazırda çalışan bir process'in ortamına yeni değerleri iletecek bir mekanizması yoktur, bu yüzden ne kadar beklersen bekle container `debug` yazdırmaya devam eder. Yeni değerin alınması için Pod'un yeniden oluşturulması (örn. rollout restart) gerekir.",{"id":205,"topic":9,"difficulty":192,"body":206,"options":207,"correct_key":178,"explanation":216},"019f651a-7d06-74cf-ac9a-2625390dd852","Aynı kurulum, ama bu kez aynı ConfigMap key'i `subPath` kullanmadan `\u002Fetc\u002Fconfig\u002FAPP_MODE` yolunda volume dosyası olarak da mount edilmiş. ConfigMap'i patch'leyip kubelet'in sync periyodu için yaklaşık bir dakika bekledikten sonra `kubectl exec pod -- cat \u002Fetc\u002Fconfig\u002FAPP_MODE` çalıştırıyorsun. Ne olur?",[208,210,212,214],{"key":178,"text":209},"Dosya sonunda yeni değeri gösterir, kubelet'in bir sonraki periyodik senkronizasyonunda",{"key":181,"text":211},"Pod manuel olarak silinip yeniden oluşturulana kadar komut dosya-bulunamadı hatasıyla başarısız olur",{"key":184,"text":213},"Dosya, env var'ların davranışıyla aynı şekilde, eski değeri sonsuza kadar korur",{"key":187,"text":215},"Dosya yalnızca container process'i onu yenilemek için açıkça bir Kubernetes API çağrısı yaparsa güncellenir","Volume olarak mount edilmiş (`subPath` KULLANILMAYAN) ConfigMap verisi kubelet tarafından periyodik olarak senkronize edilir, bu yüzden dosya içeriği hiçbir Pod yeniden başlatması olmadan güncellenen ConfigMap'i sonunda yansıtır — genelde sync periyodu içinde (yaklaşık bir dakika). Bu, hiçbir zaman Pod yeniden oluşturulmadan güncellenmeyen env var'larla temel pratik karşıtlığı oluşturur.",{"id":218,"topic":9,"difficulty":219,"body":220,"options":221,"correct_key":187,"explanation":230},"019f651a-7d07-778e-9351-c41174e381b7",3,"```yaml\nvolumeMounts:\n- name: cfgvol\n  mountPath: \u002Fetc\u002Fconfig\u002Fapp_mode.txt\n  subPath: APP_MODE\nvolumes:\n- name: cfgvol\n  configMap:\n    name: app-config\n```\nAkabinde `app-config` ConfigMap'i güncellenip `APP_MODE`'un değeri değiştiriliyor. Birkaç dakika bekleyip container içinde `\u002Fetc\u002Fconfig\u002Fapp_mode.txt`'i kontrol ediyorsun. Ne gözlemlersin?",[222,224,226,228],{"key":178,"text":223},"Dosya silinir, çünkü kaynak ConfigMap her değiştiğinde `subPath` mount'ları kaldırılır",{"key":181,"text":225},"Dosya, `subPath` olmayan bir mount ile aynı senkronizasyon döngüsünde güncellenir",{"key":184,"text":227},"Mount salt-okunur moda geçer ve sonraki okumalar izin hatasıyla başarısız olur",{"key":187,"text":229},"Dosya orijinal içeriğini korur — `subPath` volume mount'ları ConfigMap güncellemelerini almaz","Bir volume `subPath` ile mount edildiğinde, kubelet tüm-dizin mount'larında kullandığı symlink'li `..data` dizini yerine o tek dosya yolunu doğrudan bind-mount eder. Normal ConfigMap volume güncellemelerinin yayılmasını sağlayan tam olarak bu symlink değişimidir, bu yüzden `subPath` mount'u Pod yeniden oluşturulana kadar güncellenmiş değeri asla görmez.",{"id":232,"topic":9,"difficulty":174,"body":233,"options":234,"correct_key":184,"explanation":243},"019f651a-7d08-7a10-833a-a5798edba06e","Bir Secret'ın `data` alanı, base64 ile kodlanmış string'ler olarak değerleri saklar. Bu base64 kodlaması aslında ne sağlar?",[235,237,239,241],{"key":178,"text":236},"Güçlü şifreleme, öyle ki `kubectl get secret -o yaml` çalıştıran kimse değeri okuyamaz",{"key":181,"text":238},"Değerin sabit bir programa göre otomatik olarak rotasyonu",{"key":184,"text":240},"İkili\u002Fmetin verisinin bir manifestte güvenle temsili, gizlilik değil",{"key":187,"text":242},"etcd depolama boyutunu azaltmak için değerin sıkıştırılması","Base64 bir kodlamadır, şifreleme şeması değildir. İkili ya da özel karakter içeren verinin metin tabanlı bir manifestte güvenle temsil edilebilmesi için vardır. `kubectl get secret -o yaml` çalıştırıp base64'ü çözebilen (`base64 -d`) herkes düz metin değeri okuyabilir; gerçek gizlilik RBAC'a, etcd'de rest halinde şifrelemeye ya da harici bir secret deposuna bağlıdır.",{"id":245,"topic":9,"difficulty":174,"body":246,"options":247,"correct_key":181,"explanation":256},"019f651a-7d0a-7bd0-a566-ea72658df5a4","```yaml\napiVersion: v1\nkind: Secret\nmetadata:\n  name: app-secret\ntype: Opaque\nstringData:\n  DB_PASSWORD: \"s3cr3t\"\n```\nBu manifest apply edildikten sonra, `kubectl get secret app-secret -o yaml` çıktısında `data` alanının altında `DB_PASSWORD` için ne görürsün?",[248,250,252,254],{"key":178,"text":249},"Düz metin `s3cr3t` string'i, çünkü `stringData` kodlamayı atlar",{"key":181,"text":251},"Secret'ın `data` alanında tutulan base64 ile kodlanmış bir string",{"key":184,"text":253},"Hiçbir şey, çünkü aynı Secret'ta `stringData` ve `data` birlikte var olamaz",{"key":187,"text":255},"Bir hata, çünkü `type: Opaque` `stringData` alanını desteklemez","`stringData`, yalnızca yazma amaçlı bir kolaylık alanıdır: apply sırasında API sunucusu girdilerini `data`'ya birleştirir ve bu sırada base64 ile kodlar. Bu yüzden nesneyi sonradan okuduğunda her zaman `data` altında kodlanmış hali görürsün, orijinal `stringData` alanını asla.",{"fields":258,"seniorities":429,"interview_shapes":430,"locales":435,"oauth":437,"question_count":440,"coach_enabled":441,"jd_match_enabled":441},[259,284,304,320,330,343,362,381,403,410,416,423],{"key":260,"name_tr":261,"name_en":261,"sort":174,"specializations":262},"backend","Backend",[263,266,269,272,275,278,281],{"key":264,"name":265,"field":260},"general","Genel",{"key":267,"name":268,"field":260},"go","Go",{"key":270,"name":271,"field":260},"python","Python",{"key":273,"name":274,"field":260},"java","Java",{"key":276,"name":277,"field":260},"csharp","C#\u002F.NET",{"key":279,"name":280,"field":260},"nodejs","Node.js",{"key":282,"name":283,"field":260},"php","PHP",{"key":285,"name_tr":286,"name_en":286,"sort":192,"specializations":287},"frontend","Frontend",[288,289,292,295,298,301],{"key":264,"name":265,"field":285},{"key":290,"name":291,"field":285},"javascript","JavaScript",{"key":293,"name":294,"field":285},"typescript","TypeScript",{"key":296,"name":297,"field":285},"react","React",{"key":299,"name":300,"field":285},"vue","Vue",{"key":302,"name":303,"field":285},"angular","Angular",{"key":305,"name_tr":306,"name_en":306,"sort":219,"specializations":307},"fullstack","Fullstack",[308,309,310,311,312,313,314,315,316,317,318,319],{"key":264,"name":265,"field":305},{"key":267,"name":268,"field":260},{"key":270,"name":271,"field":260},{"key":273,"name":274,"field":260},{"key":276,"name":277,"field":260},{"key":279,"name":280,"field":260},{"key":282,"name":283,"field":260},{"key":290,"name":291,"field":285},{"key":293,"name":294,"field":285},{"key":296,"name":297,"field":285},{"key":299,"name":300,"field":285},{"key":302,"name":303,"field":285},{"key":5,"name_tr":6,"name_en":6,"sort":321,"specializations":322},4,[323,324,325,326,327,328,329],{"key":264,"name":265,"field":5},{"key":153,"name":154,"field":5},{"key":160,"name":161,"field":5},{"key":157,"name":158,"field":5},{"key":163,"name":164,"field":5},{"key":169,"name":170,"field":5},{"key":166,"name":167,"field":5},{"key":331,"name_tr":332,"name_en":332,"sort":333,"specializations":334},"ai-engineer","AI Engineer",5,[335,336,337,340],{"key":264,"name":265,"field":331},{"key":270,"name":271,"field":331},{"key":338,"name":339,"field":331},"llm-rag","LLM\u002FRAG",{"key":341,"name":342,"field":331},"mlops","MLOps",{"key":344,"name_tr":345,"name_en":346,"sort":347,"specializations":348},"database","Veritabanı","Database",6,[349,350,353,356,359],{"key":264,"name":265,"field":344},{"key":351,"name":352,"field":344},"postgresql","PostgreSQL",{"key":354,"name":355,"field":344},"mysql","MySQL",{"key":357,"name":358,"field":344},"mongodb","MongoDB",{"key":360,"name":361,"field":344},"redis","Redis",{"key":363,"name_tr":364,"name_en":365,"sort":366,"specializations":367},"mobile","Mobil","Mobile",7,[368,369,372,375,378],{"key":264,"name":265,"field":363},{"key":370,"name":371,"field":363},"ios-swift","iOS (Swift)",{"key":373,"name":374,"field":363},"android-kotlin","Android (Kotlin)",{"key":376,"name":377,"field":363},"flutter","Flutter",{"key":379,"name":380,"field":363},"react-native","React Native",{"key":382,"name_tr":383,"name_en":384,"sort":385,"specializations":386},"security","Güvenlik","Security",8,[387,388,391,394,397,400],{"key":264,"name":265,"field":382},{"key":389,"name":390,"field":382},"appsec","AppSec",{"key":392,"name":393,"field":382},"offensive-pentest","Offensive \u002F Pentest",{"key":395,"name":396,"field":382},"cloud-security","Cloud Security",{"key":398,"name":399,"field":382},"devsecops","DevSecOps",{"key":401,"name":402,"field":382},"blue-team-incident","Blue Team \u002F Incident",{"key":404,"name_tr":405,"name_en":406,"sort":407,"specializations":408},"qa-test-automation","QA \u002F Test Otomasyonu","QA \u002F Test Automation",9,[409],{"key":264,"name":265,"field":404},{"key":411,"name_tr":412,"name_en":412,"sort":413,"specializations":414},"data-engineer","Data Engineer",10,[415],{"key":264,"name":265,"field":411},{"key":417,"name_tr":418,"name_en":419,"sort":420,"specializations":421},"game-dev","Oyun Geliştirme","Game Development",11,[422],{"key":264,"name":265,"field":417},{"key":424,"name_tr":425,"name_en":425,"sort":426,"specializations":427},"ml-engineer","ML Engineer",12,[428],{"key":264,"name":265,"field":424},[14,15,16],{"junior":431,"mid":433,"senior":434},{"questions":432,"median_sec":3},20,{"questions":432,"median_sec":3},{"questions":432,"median_sec":3},[10,436],"en",[438,439],"google","github",21750,true]