Aracılığıyla paylaş


Windows kapsayıcı sürümlerinin uyumluluğu

Şunlar için geçerlidir: Windows Server 2025, Windows Server 2022, Windows Server 2019, Windows Server 2016

Windows Server 2016 ve Windows 10 Yıldönümü Güncelleştirmesi (her ikisi de sürüm 14393), Windows Server kapsayıcıları oluşturabilen ve çalıştırabilen ilk Windows sürümleridir. Bu sürümler kullanılarak oluşturulan kapsayıcılar daha yeni sürümlerde çalıştırılabilir, ancak başlamadan önce bilmeniz gereken birkaç şey vardır.

Windows mimarisi Linux mimarisinden büyük ölçüde farklıdır. Linux'ta monolitik bir çekirdek bulunurken, Windows Kullanıcı ve Çekirdek modu daha sıkı bağlıdır. Kapsayıcıların kullanıma sunulmasına kadar, Windows Kullanıcı ve Çekirdek modu eş zamanlı olarak gönderildi, bu nedenle Windows'ta, Linux'taki normdan farklı kapsayıcı uyumluluğu gereksinimleri ortaya çıktı.

Windows'da Kullanıcı/Çekirdek sınırını ayırmak devasa bir görevdir ve oldukça karmaşık ve zordur, ancak müşterilerimize eski sürüm kapsayıcıları çalıştırma esnekliği sağlamak için bu sınırı Windows genelinde kararlı hale getirmek üzere çok çalıştık. Windows 11 ve Windows Server 2022'den başlayarak, Windows 11 konaklarında işlemden yalıtılmış WS2022 kapsayıcılarını çalıştırma olanağını etkinleştiriyoruz. Sınırı bozan alanları yakalamak için elimizden geleni yaptık, ancak şimdi geri bildirim için özelliği Windows 11'de geliştiricilere açmak istiyoruz. Bu deneyimi sizin için etkinleştirmeye kararlıyız, bu nedenle sorunlarla karşılaştığınızda lütfen bize bildirin.

Diğer herhangi bir senaryoda, ana/konuk Windows sürüm uyumluluğu açısından kullanıcı/çekirdek modu uyumsuzlukları mümkün olsa da garanti edilmemektedir, bu nedenle kapsayıcı görüntüsünün ana bilgisayarda çalışması engellenebilir. Uyumsuz herhangi bir sürüm için Hyper-V yalıtımı ile çalıştırmak, kapsayıcıya eşleşen çekirdek ikilileri sağlar ve konağın sürümüne bağımlı değildir. Ayrıntılı uyumluluk matrisi için aşağıdaki tablolara bakın.

Windows Server ana bilgisayar işletim sistemi uyumluluğu

Kapsayıcı temel görüntüsü işletim sistemi sürümü Hyper-V izolasyonunu destekler İşlem yalıtımını destekler
Windows Server 2025
Windows Sunucusu 2022
Windows Server 2019
Windows Server 2016

Windows İstemcisi ana bilgisayar işletim sistemi uyumluluğu

Kapsayıcı temel görüntüsü işletim sistemi sürümü Hyper-V izolasyonunu destekler İşlem yalıtımını destekler
Windows Server 2025 1 1
Windows Sunucusu 2022
Windows Server 2019
Windows Server 2016
  1. Windows 11 24H2 (Build 2600) sürümünden itibaren desteklenmektedir.

Uyarı

Windows 10 sürüm 1809 ve Windows Server 2019, GA anında aynı derleme numarasına sahipti. O zamandan beri bağımsız güncelleştirmeler aldılar ve bu da derleme numarası uyumsuzluğuna yol açtı. Windows istemcisi için işlem yalıtımı, derleme numarası uyuşmazlığına rağmen Windows 11 üzerinde, Windows Server 2022 görüntüleri ile önizleme aşamasında kullanılabilir. Windows 10'da işlem yalıtılmış kapsayıcıları çalıştırma gereksiniminiz varsa lütfen GitHub sorunlarımızı bize bildirin.

Kapsayıcı ana bilgisayar sürümünü kapsayıcı görüntüsü sürümleriyle eşleştirme

Windows Server kapsayıcıları

Build numarası (yeni Windows sürümü)

Windows işletim sisteminin dört sürüm oluşturma düzeyi vardır: birincil, ikincil, derleme ve düzeltme. Örneğin, sürüm 10.0.14393.103'ün ana sürümü 10, ikincil sürümü 0, derleme numarası 14393 ve düzeltme sayısı 103 olacaktır. Derleme numarası yalnızca işletim sisteminin yeni sürümleri yayımlandığında değişir ve Windows güncelleştirmeleri uygulandıkça düzeltme numarası güncelleştirilir.

WS2022 + Windows 11 dışında, kapsayıcı konağı ile kapsayıcı görüntüsü arasındaki derleme numarası farklı olduğunda Windows Server kapsayıcılarının başlatılması engellenir. Örneğin, kapsayıcı konağı sürüm 10.0.14393.* (Windows Server 2016) olduğunda ve görüntü sürümü 10.0.16299.* (Windows Server, sürüm 1709) olan bir kapsayıcı çalıştırmayı denediğinizde, işletim sistemi işlem hizmeti bir sürüm uyumsuzluk hatası döndürür.

Windows Server 2016 Kısıtlamaları

Windows Server 2016 tabanlı kapsayıcılar, kapsayıcı konağı ile kapsayıcı görüntüsünün düzeltme numaralarının farklı olduğu bir sistemde çalışmaz. Örneğin, kapsayıcı konağı sürümü 10.0.14393.1914 (KB4051033 uygulanmış Windows Server 2016) ve kapsayıcı görüntüsü sürümü 10.0.14393.1944 (KB4053579 uygulanmış Windows Server 2016) ise, görüntü başlatılamayabilir.

Windows Server, sürüm 1809 ve üzerini kullanan konaklar veya görüntüler için bu kural geçerli değildir ; konak ve kapsayıcı görüntüsünün eşleşen düzeltmelere ihtiyacı yoktur.

Uyarı

Güvenli ve uyumlu kalmak için hem ana bilgisayarınızı hem de kapsayıcılarınızı en son düzeltme ekleri ve güncelleştirmelerle güncelleştirmenizi kesinlikle öneririz. Windows kapsayıcılarını güncelleştirmeyle ilgili önemli yönergeler için bkz. Windows Server kapsayıcılarını güncelleştirme.

Pratik uygulama

Örnek 1: Kapsayıcı konağı, KB4041691 uygulanmış olarak Windows Server 2016 çalıştırıyor. Bu konağa dağıtılan tüm Windows Server kapsayıcıları 10.0.14393.1770 kapsayıcı temel görüntülerini temel almalıdır. Konak kapsayıcısına KB4053579 uygularsanız, konak kapsayıcısının bunları desteklediğinden emin olmak için görüntüleri de güncelleştirmeniz gerekir.

Örnek 2: Kapsayıcı konağı, KB4534273 yaması uygulanmış Windows Server 1809 sürümünü çalıştırıyor. Bu konağa dağıtılacak tüm Windows Server kapsayıcıları, Windows Server sürüm 1809 (10.0.17763) kapsayıcı temel görüntüsüne dayanmalıdır, ancak ana makinenin KB'siyle birebir eşleşmesi gerekmez. Konağa KB4534273 uygulanırsa kapsayıcı görüntüleri desteklenmeye devam eder, ancak olası güvenlik sorunlarını gidermek için bunları güncelleştirmenizi öneririz.

Sürümü sorgulama

Yöntem 1: Sürüm 1709'da kullanıma sunulan cmd istemi ve ver komutu artık düzeltme ayrıntılarını döndürür.

Microsoft Windows [Version 10.0.16299.125]
(c) 2017 Microsoft Corporation. All rights reserved.

C:\>ver

Microsoft Windows [Version 10.0.16299.125]

Yöntem 2: Aşağıdaki kayıt defteri anahtarını sorgula: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion

Örneğin:

C:\>reg query "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion" /v BuildLabEx
Windows PowerShell
Copyright (C) 2016 Microsoft Corporation. All rights reserved.

PS C:\Users\Administrator> (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\').BuildLabEx
14393.321.amd64fre.rs1_release_inmarket.161004-2338

Temel görüntünüzün hangi sürümü kullandığını denetlemek için Docker hub'ında etiketleri veya görüntü açıklamasında sağlanan görüntü karma tablosunu gözden geçirin. Windows 10 güncelleştirme geçmişi sayfasında her derleme ve düzeltmenin ne zaman yayımlandığı listelenir.

Kapsayıcılar için Hyper-V yalıtımı

Windows kapsayıcılarını Hyper-V yalıtımlı veya yalıtımsız olarak çalıştırabilirsiniz. Hyper-V yalıtımı, kapsayıcının çevresinde iyileştirilmiş bir VM ile güvenli bir sınır oluşturur. Standart Windows kapsayıcılarının kapsayıcılar ve ana bilgisayar arasında çekirdeği paylaştığı durumların aksine, her Hyper-V ayrılmış kapsayıcının kendi Windows çekirdeği örneği vardır. Bu, kapsayıcı konağı ve görüntüsünde farklı işletim sistemi sürümlerine sahip olabileceğiniz anlamına gelir (daha fazla bilgi için aşağıdaki uyumluluk matrisini inceleyin).

Hyper-V yalıtımlı bir kapsayıcı çalıştırmak için docker run komutunuza etiketini --isolation=hyperv eklemeniz yeterlidir.

Eşleşmeyen sürümlerden gelen hatalar

Desteklenmeyen bir bileşimi çalıştırmayı denerseniz aşağıdaki hatayı alırsınız:

docker: Error response from daemon: container b81ed896222eb87906ccab1c3dd2fc49324eafa798438f7979b87b210906f839 encountered an error during CreateContainer: failure in a Windows system call: The operating system of the container does not match the operating system of the host. (0xc0370101) extra info: {"SystemType":"Container","Name":"b81ed896222eb87906ccab1c3dd2fc49324eafa798438f7979b87b210906f839","Owner":"docker","IsDummy":false,"VolumePath":"\\\\?\\Volume{2443d38a-1379-4bcf-a4b7-fc6ad4cd7b65}","IgnoreFlushesDuringBoot":true,"LayerFolderPath":"C:\\ProgramData\\docker\\windowsfilter\\b81ed896222eb87906ccab1c3dd2fc49324eafa798438f7979b87b210906f839","Layers":[{"ID":"1532b584-8431-5b5a-8735-5e1b4fe9c2a9","Path":"C:\\ProgramData\\docker\\windowsfilter\\b2b88bc2a47abcc682e422507abbba9c9b6d826d34e67b9e4e3144cc125a1f80"},{"ID":"a64b8da5-cd6e-5540-bc73-d81acae6da54","Path":"C:\\ProgramData\\docker\\windowsfilter\\5caaedbced1f546bccd01c9d31ea6eea4d30701ebba7b95ee8faa8c098a6845a"}],"HostName":"b81ed896222e","MappedDirectories":[],"HvPartition":false,"EndpointList":["002a0d9e-13b7-42c0-89b2-c1e80d9af243"],"Servicing":false,"AllowUnqualifiedDNSQuery":true}.

Bu hatayı çözmenin üç yolu vardır:

  • Doğru mcr.microsoft.com/microsoft-windows-nanoserver veya mcr.microsoft.com/windows/servercore sürümüne göre kapsayıcıyı yeniden oluşturun.
  • Konak daha yeniyse docker run --isolation=hyperv ... komutunu çalıştırın.
  • Kapsayıcıyı aynı Windows sürümüne sahip farklı bir konakta çalıştırmayı deneyin

Hangi kapsayıcı işletim sistemi sürümünün kullanılacağını seçme

Uyarı

16 Nisan 2019 itibarıyla Windows Server, Windows Server Core ve Nano Sunucu temel işletim sistemi kapsayıcı görüntüleri için "en son" etiketi artık yayımlanmaz veya korunmaz. Bu depolardan görüntü çekerken veya bunlara başvururken belirli bir etiket bildirmeniz gerekir.

Kapsayıcınız için hangi sürümü kullanmanız gerektiğini bilmeniz gerekir. Örneğin, kapsayıcı işletim sisteminiz olarak Windows Server sürüm 1809'u istiyorsanız ve bunun için en son düzeltme eklerine sahip olmak istiyorsanız, temel işletim sistemi kapsayıcı görüntülerinin hangi sürümünü istediğinizi belirtirken etiketini 1809 kullanmanız gerekir; örneğin:

FROM mcr.microsoft.com/windows/nanoserver:1809
...

Ancak, Windows Server sürüm 1809'un belirli bir düzeltme ekini istiyorsanız, etikette KB numarasını belirtebilirsiniz. Örneğin, Windows Server sürüm 1809'dan KB4493509 uygulanmış Nano Server temel işletim sistemi kapsayıcı imajını almak için şöyle belirtmelisiniz:

FROM mcr.microsoft.com/windows/nanoserver:1809-KB4493509
...

Ayrıca, etiketinde işletim sistemi sürümünü belirterek daha önce kullandığımız şemayla tam olarak ihtiyacınız olan düzeltme eklerini belirtebilirsiniz:

FROM mcr.microsoft.com/windows/nanoserver:10.0.17763.437
...

Windows Server 2022 ve Windows Server 2019 tabanlı Sunucu Çekirdeği temel görüntüleri Long-Term Bakım Kanalı (LTSC) sürümleridir. Örneğin, Sunucu Çekirdeği görüntünüzün kapsayıcı işletim sistemi olarak Windows Server 2019'u istiyorsanız ve bunun için en son düzeltme eklerine sahip olmak istiyorsanız, aşağıdaki gibi LTSC sürümlerini belirtebilirsiniz:

FROM mcr.microsoft.com/windows/servercore:ltsc2019
...

Docker Swarm kullanarak sürümleri eşleştirme

Docker Swarm şu anda bir kapsayıcının kullandığı Windows sürümünü aynı sürüme sahip bir konakla eşleştirmek için yerleşik bir yönteme sahip değildir. Hizmeti daha yeni bir kapsayıcı kullanacak şekilde güncelleştirirseniz, başarıyla çalıştırılır.

Windows'un birden çok sürümünü uzun bir süre çalıştırmanız gerekiyorsa, uygulayabileceğiniz iki yaklaşım vardır: Windows konaklarını her zaman Hyper-V yalıtımı kullanacak şekilde yapılandırın veya etiket kısıtlamalarını kullanın.

Başlamayan bir hizmeti bulmak

Bir hizmet başlamazsa, MODEreplicated olduğunu, ancak REPLICAS'nin 0'da takılıp kaldığını görürsünüz. Sorunun işletim sistemi sürümü olup olmadığını görmek için aşağıdaki komutları çalıştırın:

Hizmet adını bulmak için docker service ls komutunu çalıştırın:

ID                  NAME                MODE                REPLICAS            IMAGE                                             PORTS
xh6mwbdq2uil        angry_liskov        replicated          0/1                 windows/servercore/iis

Durumu ve en son denemeleri almak için docker service ps (hizmet adı) komutunu çalıştırın:

C:\Program Files\Docker>docker service ps angry_liskov
ID                  NAME                 IMAGE                                             NODE                DESIRED STATE       CURRENT STATE               ERROR                              PORTS
klkbhn742lv0        angry_liskov.1       windows/servercore/iis   WIN-BSTMQDRQC2E     Ready               Ready 3 seconds ago
y5blbdum70zo         \_ angry_liskov.1   windows/servercore/iis   WIN-BSTMQDRQC2E     Shutdown            Failed 24 seconds ago       "starting container failed: co…"
yjq6zwzqj8kt         \_ angry_liskov.1   windows/servercore/iis   WIN-BSTMQDRQC2E     Shutdown            Failed 31 seconds ago       "starting container failed: co…"

ytnnv80p03xx         \_ angry_liskov.1   windows/servercore/iis   WIN-BSTMQDRQC2E     Shutdown            Failed about a minute ago   "starting container failed: co…"
xeqkxbsao57w         \_ angry_liskov.1   windows/servercore/iis   WIN-BSTMQDRQC2E     Shutdown            Failed about a minute ago   "starting container failed: co…"

Eğer starting container failed: ... görürseniz, docker service ps --no-trunc (kapsayıcı adı) komutuyla ilgili tam hatayı görebilirsiniz:

C:\Program Files\Docker>docker service ps --no-trunc angry_liskov
ID                          NAME                 IMAGE                                                                                                                     NODE                DESIRED STATE       CURRENT STATE                     ERROR                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          PORTS
dwsd6sjlwsgic5vrglhtxu178   angry_liskov.1       windows/servercore/iis@sha256:868bca7e89e1743792e15f78edb5a73070ef44eae6807dc3f05f9b94c23943d5   WIN-BSTMQDRQC2E     Running             Starting less than a second ago
y5blbdum70zoh1f6uhx5nxsfv    \_ angry_liskov.1   windows/servercore/iis@sha256:868bca7e89e1743792e15f78edb5a73070ef44eae6807dc3f05f9b94c23943d5   WIN-BSTMQDRQC2E     Shutdown            Failed 39 seconds ago             "starting container failed: container e7b5d3adba7e510569c18d8e55f7c689d7cb92be40a516c91b363e27f84604d0 encountered an error during CreateContainer: failure in a Windows system call: The operating system of the container does not match the operating system of the host. (0xc0370101) extra info: {"SystemType":"Container","Name":"e7b5d3adba7e510569c18d8e55f7c689d7cb92be40a516c91b363e27f84604d0","Owner":"docker","VolumePath":"\\\\?\\Volume{2443d38a-1379-4bcf-a4b7-fc6ad4cd7b65}","IgnoreFlushesDuringBoot":true,"LayerFolderPath":"C:\\ProgramData\\docker\\windowsfilter\\e7b5d3adba7e510569c18d8e55f7c689d7cb92be40a516c91b363e27f84604d0","Layers":[{"ID":"bcf2630f-ea95-529b-b33c-e5cdab0afdb4","Path":"C:\\ProgramData\\docker\\windowsfilter\\200235127f92416724ae1d53ed3fdc86d78767132d019bdda1e1192ee4cf3ae4"},{"ID":"e3ea10a8-4c2f-5b93-b2aa-720982f116f6","Path":"C:\\ProgramData\\docker\\windowsfilter\\0ccc9fa71a9f4c5f6f3bc8134fe3533e454e09f453de662cf99ab5d2106abbdc"},{"ID":"cff5391f-e481-593c-aff7-12e080c653ab","Path":"C:\\ProgramData\\docker\\windowsfilter\\a49576b24cd6ec4a26202871c36c0a2083d507394a3072186133131a72601a31"},{"ID":"499cb51e-b891-549a-b1f4-8a25a4665fbd","Path":"C:\\ProgramData\\docker\\windowsfilter\\fdf2f52c4323c62f7ff9b031c0bc3af42cf5fba91098d51089d039fb3e834c08"},{"ID":"1532b584-8431-5b5a-8735-5e1b4fe9c2a9","Path":"C:\\ProgramData\\docker\\windowsfilter\\b2b88bc2a47abcc682e422507abbba9c9b6d826d34e67b9e4e3144cc125a1f80"},{"ID":"a64b8da5-cd6e-5540-bc73-d81acae6da54","Path":"C:\\ProgramData\\docker\\windowsfilter\\5caaedbced1f546bccd01c9d31ea6eea4d30701ebba7b95ee8faa8c098a6845a"}],"HostName":"e7b5d3adba7e","HvPartition":false,"EndpointList":["298bb656-8800-4948-a41c-1b0500f3d94c"],"AllowUnqualifiedDNSQuery":true}"

Bu, ile CreateContainer: failure in a Windows system call: The operating system of the container does not match the operating system of the host. (0xc0370101)aynı hatadır.

Düzeltme - Hizmeti eşleşen bir sürüm kullanacak şekilde güncelleştirme

Docker Swarm için dikkat edilmesi gereken iki nokta vardır. Oluşturmadığınız bir görüntüyü kullanan bir hizmet içeren bir compose dosyanız varsa, referansı uygun şekilde güncellemek isteyebilirsiniz. Örneğin:

version: '3'

services:
  YourServiceName:
    image: windows/servercore:1709
...

Dikkate alınacak diğer nokta, işaret ettiğiniz görüntünün kendi oluşturduğunuz görüntü olmasıdır (örneğin, contoso/myimage):

version: '3'

services:
  YourServiceName:
    image: contoso/myimage
...

Bu durumda, docker-compose satırı yerine bu dockerfile dosyasını değiştirmek için Eşleşmeyen sürümlerden hatalar bölümünde açıklanan yöntemi kullanmanız gerekir.

Azaltma - Docker Swarm ile Hyper-V yalıtımı kullanma

Windows kapsayıcıları, kapsayıcı başına Hyper-V yalıtımının kullanılmasını destekler. Bu, Docker hizmet yapılandırmasını değiştirmeyi ve docker altyapısını yeniden başlatmayı gerektirir.

  1. C:\ProgramData\docker\config\daemon.json Düzenle

  2. Bir çizgi ekle "exec-opts":["isolation=hyperv"]

    Uyarı

    daemon.json dosyası varsayılan olarak mevcut değildir. Dizine göz atarken bu durumun böyle olduğunu fark ederseniz, dosyayı oluşturmanız gerekir. Ardından aşağıdakini kopyalamak istersiniz:

    {
        "exec-opts":["isolation=hyperv"]
    }
    
  3. Dosyayı kapatıp kaydedin, ardından PowerShell'de aşağıdaki cmdlet'leri çalıştırarak docker altyapısını yeniden başlatın:

    Stop-Service docker
    Start-Service docker
    
  4. Hizmeti yeniden başlattıktan sonra kapsayıcılarınızı başlatın. Çalıştırıldıktan sonra, kapsayıcıyı aşağıdaki cmdlet ile inceleyerek kapsayıcının yalıtım düzeyini doğrulayabilirsiniz:

    docker inspect --format='{{json .HostConfig.Isolation}}' $instanceNameOrId
    

Ya "işlem" ya da "hyperv" değerini döndürür. daemon.json'ı yukarıda açıklandığı gibi değiştirip ayarladıysanız, son belirtileni göstermelidir.

Azaltma - Etiketleri ve kısıtlamaları kullanma

Sürümleri eşleştirmek için etiketleri ve kısıtlamaları şu şekilde kullanabilirsiniz:

  1. Her düğüme etiket ekleyin.

    Her düğümde iki etiket ekleyin: OS ve OsVersion. Bu, yerel olarak çalıştırdığınızı varsayar, ancak bunlar, uzak bir sunucu üzerinde ayarlanacak şekilde değiştirilebilir.

    docker node update --label-add OS="windows" $ENV:COMPUTERNAME
    docker node update --label-add OsVersion="$((Get-ComputerInfo).OsVersion)" $ENV:COMPUTERNAME
    

    Daha sonra, yeni eklenen etiketleri göstermesi gereken docker node inspect komutunu çalıştırarak bunları denetleyebilirsiniz:

           "Spec": {
                "Labels": {
                   "OS": "windows",
                   "OsVersion": "10.0.16296"
               },
                "Role": "manager",
                "Availability": "active"
            }
    
  2. Hizmet kısıtlaması ekleyin.

    Artık her düğümü etiketlediğinize göre, hizmetlerin yerleşimini belirleyen kısıtlamaları güncelleştirebilirsiniz. Aşağıdaki örnekte, "contoso_service" yerine gerçek hizmetinizin adını yazın:

    docker service update \
        --constraint-add "node.labels.OS == windows" \
        --constraint-add "node.labels.OsVersion == $((Get-ComputerInfo).OsVersion)" \
        contoso_service
    

    Bu, bir düğümün çalışabileceği yerleri zorlar ve sınırlar.

Hizmet kısıtlamalarını kullanma hakkında daha fazla bilgi edinmek için hizmet oluşturma başvurusuna göz atın.

Kubernetes kullanarak sürümleri eşleştirme

Kubernetes'te podlar zamanlandığında Docker Swarm kullanarak eşleşen sürümler bölümünde açıklanan aynı sorun oluşabilir. Bu sorun benzer stratejilerle önlenebilir:

  • Kapsayıcıyı geliştirme ve üretimdeki aynı işletim sistemi sürümüne göre yeniden oluşturun. Nasıl yapılacağını öğrenmek için bkz. Kullanılacak kapsayıcı işletim sistemi sürümünü seçme.
  • Hem Windows Server 2016 hem de Windows Server sürüm 1709 düğümleri aynı kümedeyse podların uyumlu düğümlerde zamanlandığından emin olmak için düğüm etiketlerini ve nodeSelector'ları kullanın
  • İşletim sistemi sürümüne göre ayrı kümeler kullanma

İşletim sistemi uyuşmazlığında pod bulma başarısız oldu

Bu durumda dağıtım, eşleşmeyen bir işletim sistemi sürümüne sahip ve Hyper-V yalıtımı etkinleştirilmemiş bir düğümde zamanlanmış bir pod içeriyordu.

ile listelenen kubectl describe pod <podname>olaylarda da aynı hata gösterilir. Birkaç denemeden sonra pod durumu büyük olasılıkla CrashLoopBackOff olacaktır.

$ kubectl -n plang describe pod fabrikamfiber.web-789699744-rqv6p

Name:           fabrikamfiber.web-789699744-rqv6p
Namespace:      plang
Node:           38519acs9011/10.240.0.6
Start Time:     Mon, 09 Oct 2017 19:40:30 +0000
Labels:         io.kompose.service=fabrikamfiber.web
                pod-template-hash=789699744
Annotations:    kubernetes.io/created-by={"kind":"SerializedReference","apiVersion":"v1","reference":{"kind":"ReplicaSet","namespace":"plang","name":"fabrikamfiber.web-789699744","uid":"b5062a08-ad29-11e7-b16e-000d3a...
Status:         Running
IP:             10.244.3.169
Created By:     ReplicaSet/fabrikamfiber.web-789699744
Controlled By:  ReplicaSet/fabrikamfiber.web-789699744
Containers:
  fabrikamfiberweb:
    Container ID:       docker://eab0151378308315ed6c31adf4ad9e31e6d65fd300e56e742757004a969a803a
    Image:              patricklang/fabrikamfiber.web:latest
    Image ID:           docker-pullable://patricklang/fabrikamfiber.web@sha256:562741016ce7d9a232a389449a4fd0a0a55aab178cf324144404812887250ead
    Port:               80/TCP
    State:              Waiting
      Reason:           CrashLoopBackOff
    Last State:         Terminated
      Reason:           ContainerCannotRun
      Message:          container eab0151378308315ed6c31adf4ad9e31e6d65fd300e56e742757004a969a803a encountered an error during CreateContainer: failure in a Windows system call: The operating system of the container does not match the operating system of the host. (0xc0370101) extra info: {"SystemType":"Container","Name":"eab0151378308315ed6c31adf4ad9e31e6d65fd300e56e742757004a969a803a","Owner":"docker","IsDummy":false,"VolumePath":"\\\\?\\Volume{037b6606-bc9c-461f-ae02-829c28410798}","IgnoreFlushesDuringBoot":true,"LayerFolderPath":"C:\\ProgramData\\docker\\windowsfilter\\eab0151378308315ed6c31adf4ad9e31e6d65fd300e56e742757004a969a803a","Layers":[{"ID":"f8bc427f-7aa3-59c6-b271-7331713e9451","Path":"C:\\ProgramData\\docker\\windowsfilter\\e206d2514a6265a76645b9d6b3dc6a78777c34dbf5da9fa2d564651645685881"},{"ID":"a6f35e41-a86c-5e4d-a19a-a6c2464bfb47","Path":"C:\\ProgramData\\docker\\windowsfilter\\0f21f1e28ef13030bbf0d87cbc97d1bc75f82ea53c842e9a3250a2156ced12d5"},{"ID":"4f624ca7-2c6d-5c42-b73f-be6e6baf2530","Path":"C:\\ProgramData\\docker\\windowsfilter\\4d9e2ad969fbd74fd58c98b5ab61e55a523087910da5200920e2b6f641d00c67"},{"ID":"88e360ff-32af-521d-9a3f-3760c12b35e2","Path":"C:\\ProgramData\\docker\\windowsfilter\\9e16a3d53d3e9b33344a6f0d4ed34c8a46448ee7636b672b61718225b8165e6e"},{"ID":"20f1a4e0-a6f3-5db3-9bf2-01fd3e9e855a","Path":"C:\\ProgramData\\docker\\windowsfilter\\7eec7f59f9adce38cc0a6755da58a3589287d920d37414b5b21b5b543d910461"},{"ID":"c2b3d728-4879-5343-a92a-b735752a4724","Path":"C:\\ProgramData\\docker\\windowsfilter\\8ed04b60acc0f65f541292a9e598d5f73019c8db425f8d49ea5819eab16a42f3"},{"ID":"2973e760-dc59-5800-a3de-ab9d93be81e5","Path":"C:\\ProgramData\\docker\\windowsfilter\\cc71305d45f09ce377ef497f28c3a74ee027c27f20657d2c4a5f157d2457cc75"},{"ID":"454a7d36-038c-5364-8a25-fa84091869d6","Path":"C:\\ProgramData\\docker\\windowsfilter\\9e8cde1ce8f5de861a5f22841f1ab9bc53d5f606d06efeacf5177f340e8d54d0"},{"ID":"9b748c8c-69eb-55fb-a1c1-5688cac4efd8","Path":"C:\\ProgramData\\docker\\windowsfilter\\8e02bf5404057055a71d542780a2bb2731be4b3707c01918ba969fb4d83b98ec"},{"ID":"bfde5c26-b33f-5424-9405-9d69c2fea4d0","Path":"C:\\ProgramData\\docker\\windowsfilter\\77483cedfb0964008c33d92d306734e1fab3b5e1ebb27e898f58ccfd108108f2"},{"ID":"bdabfbf5-80d1-57f1-86f3-448ce97e2d05","Path":"C:\\ProgramData\\docker\\windowsfilter\\aed2ebbb31ad24b38ee8521dd17744319f83d267bf7f360bc177e27ae9a006cf"},{"ID":"ad9b34f2-dcee-59ea-8962-b30704ae6331","Path":"C:\\ProgramData\\docker\\windowsfilter\\d44d3a675fec1070b61d6ea9bacef4ac12513caf16bd6453f043eed2792f75d8"}],"HostName":"fabrikamfiber.web-789699744-rqv6p","MappedDirectories":[{"HostPath":"c:\\var\\lib\\kubelet\\pods\\b50f0027-ad29-11e7-b16e-000d3afd2878\\volumes\\kubernetes.io~secret\\default-token-rw9dn","ContainerPath":"c:\\var\\run\\secrets\\kubernetes.io\\serviceaccount","ReadOnly":true,"BandwidthMaximum":0,"IOPSMaximum":0}],"HvPartition":false,"EndpointList":null,"NetworkSharedContainerName":"586870f5833279678773cb700db3c175afc81d557a75867bf39b43f985133d13","Servicing":false,"AllowUnqualifiedDNSQuery":false}
      Exit Code:        128
      Started:          Mon, 09 Oct 2017 20:27:08 +0000
      Finished:         Mon, 09 Oct 2017 20:27:08 +0000
    Ready:              False
    Restart Count:      10
    Environment:        <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-rw9dn (ro)
Conditions:
  Type          Status
  Initialized   True
  Ready         False
  PodScheduled  True
Volumes:
  default-token-rw9dn:
    Type:       Secret (a volume populated by a Secret)
    SecretName: default-token-rw9dn
    Optional:   false
QoS Class:      BestEffort
Node-Selectors: beta.kubernetes.io/os=windows
Tolerations:    <none>
Events:
  FirstSeen     LastSeen        Count   From                    SubObjectPath                           Type            Reason                  Message
  ---------     --------        -----   ----                    -------------                           --------        ------                  -------
  49m           49m             1       default-scheduler                                               Normal          Scheduled               Successfully assigned fabrikamfiber.web-789699744-rqv6p to 38519acs9011
  49m           49m             1       kubelet, 38519acs9011                                           Normal          SuccessfulMountVolume   MountVolume.SetUp succeeded for volume "default-token-rw9dn"
  29m           29m             1       kubelet, 38519acs9011   spec.containers{fabrikamfiberweb}       Warning         Failed                  Failed to pull image "patricklang/fabrikamfiber.web:latest": rpc error: code = 2 desc = Error response from daemon: {"message":"Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io: no such host"}
  49m           3m              12      kubelet, 38519acs9011   spec.containers{fabrikamfiberweb}       Normal          Pulling                 pulling image "patricklang/fabrikamfiber.web:latest"
  33m           3m              11      kubelet, 38519acs9011   spec.containers{fabrikamfiberweb}       Normal          Pulled                  Successfully pulled image "patricklang/fabrikamfiber.web:latest"
  33m           3m              11      kubelet, 38519acs9011   spec.containers{fabrikamfiberweb}       Normal          Created                 Created container
  33m           2m              11      kubelet, 38519acs9011   spec.containers{fabrikamfiberweb}       Warning         Failed                  Error: failed to start container "fabrikamfiberweb": Error response from daemon: {"message":"container fabrikamfiberweb encountered an error during CreateContainer: failure in a Windows system call: The operating system of the container does not match the operating system of the host. (0xc0370101) extra info: {\"SystemType\":\"Container\",\"Name\":\"fabrikamfiberweb\",\"Owner\":\"docker\",\"IsDummy\":false,\"VolumePath\":\"\\\\\\\\?\\\\Volume{037b6606-bc9c-461f-ae02-829c28410798}\",\"IgnoreFlushesDuringBoot\":true,\"LayerFolderPath\":\"C:\\\\ProgramData\\\\docker\\\\windowsfilter\\\\fabrikamfiberweb\",\"Layers\":[{\"ID\":\"f8bc427f-7aa3-59c6-b271-7331713e9451\",\"Path\":\"C:\\\\ProgramData\\\\docker\\\\windowsfilter\\\\e206d2514a6265a76645b9d6b3dc6a78777c34dbf5da9fa2d564651645685881\"},{\"ID\":\"a6f35e41-a86c-5e4d-a19a-a6c2464bfb47\",\"Path\":\"C:\\\\ProgramData\\\\docker\\\\windowsfilter\\\\0f21f1e28ef13030bbf0d87cbc97d1bc75f82ea53c842e9a3250a2156ced12d5\"},{\"ID\":\"4f624ca7-2c6d-5c42-b73f-be6e6baf2530\",\"Path\":\"C:\\\\ProgramData\\\\docker\\\\windowsfilter\\\\4d9e2ad969fbd74fd58c98b5ab61e55a523087910da5200920e2b6f641d00c67\"},{\"ID\":\"88e360ff-32af-521d-9a3f-3760c12b35e2\",\"Path\":\"C:\\\\ProgramData\\\\docker\\\\windowsfilter\\\\9e16a3d53d3e9b33344a6f0d4ed34c8a46448ee7636b672b61718225b8165e6e\"},{\"ID\":\"20f1a4e0-a6f3-5db3-9bf2-01fd3e9e855a\",\"Path\":\"C:\\\\ProgramData\\\\docker\\\\windowsfilter\\\\7eec7f59f9adce38cc0a6755da58a3589287d920d37414b5b21b5b543d910461\"},{\"ID\":\"c2b3d728-4879-5343-a92a-b735752a4724\",\"Path\":\"C:\\\\ProgramData\\\\docker\\\\windowsfilter\\\\8ed04b60acc0f65f541292a9e598d5f73019c8db425f8d49ea5819eab16a42f3\"},{\"ID\":\"2973e760-dc59-5800-a3de-ab9d93be81e5\",\"Path\":\"C:\\\\ProgramData\\\\docker\\\\windowsfilter\\\\cc71305d45f09ce377ef497f28c3a74ee027c27f20657d2c4a5f157d2457cc75\"},{\"ID\":\"454a7d36-038c-5364-8a25-fa84091869d6\",\"Path\":\"C:\\\\ProgramData\\\\docker\\\\windowsfilter\\\\9e8cde1ce8f5de861a5f22841f1ab9bc53d5f606d06efeacf5177f340e8d54d0\"},{\"ID\":\"9b748c8c-69eb-55fb-a1c1-5688cac4efd8\",\"Path\":\"C:\\\\ProgramData\\\\docker\\\\windowsfilter\\\\8e02bf5404057055a71d542780a2bb2731be4b3707c01918ba969fb4d83b98ec\"},{\"ID\":\"bfde5c26-b33f-5424-9405-9d69c2fea4d0\",\"Path\":\"C:\\\\ProgramData\\\\docker\\\\windowsfilter\\\\77483cedfb0964008c33d92d306734e1fab3b5e1ebb27e898f58ccfd108108f2\"},{\"ID\":\"bdabfbf5-80d1-57f1-86f3-448ce97e2d05\",\"Path\":\"C:\\\\ProgramData\\\\docker\\\\windowsfilter\\\\aed2ebbb31ad24b38ee8521dd17744319f83d267bf7f360bc177e27ae9a006cf\"},{\"ID\":\"ad9b34f2-dcee-59ea-8962-b30704ae6331\",\"Path\":\"C:\\\\ProgramData\\\\docker\\\\windowsfilter\\\\d44d3a675fec1070b61d6ea9bacef4ac12513caf16bd6453f043eed2792f75d8\"}],\"HostName\":\"fabrikamfiber.web-789699744-rqv6p\",\"MappedDirectories\":[{\"HostPath\":\"c:\\\\var\\\\lib\\\\kubelet\\\\pods\\\\b50f0027-ad29-11e7-b16e-000d3afd2878\\\\volumes\\\\kubernetes.io~secret\\\\default-token-rw9dn\",\"ContainerPath\":\"c:\\\\var\\\\run\\\\secrets\\\\kubernetes.io\\\\serviceaccount\",\"ReadOnly\":true,\"BandwidthMaximum\":0,\"IOPSMaximum\":0}],\"HvPartition\":false,\"EndpointList\":null,\"NetworkSharedContainerName\":\"586870f5833279678773cb700db3c175afc81d557a75867bf39b43f985133d13\",\"Servicing\":false,\"AllowUnqualifiedDNSQuery\":false}"}
  33m           11s             151     kubelet, 38519acs9011                                           Warning         FailedSync              Error syncing pod
  32m           11s             139     kubelet, 38519acs9011   spec.containers{fabrikamfiberweb}       Warning         BackOff                 Back-off restarting failed container

Azaltma - düğüm etiketlerini ve nodeSelector'ı kullanma

Tüm düğümlerin listesini almak için kubectl get node komutunu çalıştırın. Bundan sonra, daha fazla ayrıntı almak için kubectl describe node (düğüm adı) komutunu çalıştırabilirsiniz.

Aşağıdaki örnekte, iki Windows düğümü farklı sürümler çalıştırıyor:

$ kubectl get node

NAME                        STATUS    AGE       VERSION
38519acs9010                Ready     21h       v1.7.7-7+e79c96c8ff2d8e
38519acs9011                Ready     4h        v1.7.7-25+bc3094f1d650a2
k8s-linuxpool1-38519084-0   Ready     21h       v1.7.7
k8s-master-38519084-0       Ready     21h       v1.7.7

$ kubectl describe node 38519acs9010

Name:                   38519acs9010
Role:
Labels:                 beta.kubernetes.io/arch=amd64
                        beta.kubernetes.io/instance-type=Standard_D2_v2
                        beta.kubernetes.io/os=windows
                        failure-domain.beta.kubernetes.io/region=westus2
                        failure-domain.beta.kubernetes.io/zone=0
                        kubernetes.io/hostname=38519acs9010
Annotations:            node.alpha.kubernetes.io/ttl=0
                        volumes.kubernetes.io/controller-managed-attach-detach=true
Taints:                 <none>
CreationTimestamp:      Fri, 06 Oct 2017 01:41:02 +0000

...

System Info:
 Machine ID:                    38519acs9010
 System UUID:
 Boot ID:
 Kernel Version:                10.0 14393 (14393.1715.amd64fre.rs1_release_inmarket.170906-1810)
 OS Image:
 Operating System:              windows
 Architecture:                  amd64
 ...

$ kubectl describe node 38519acs9011
Name:                   38519acs9011
Role:
Labels:                 beta.kubernetes.io/arch=amd64
                        beta.kubernetes.io/instance-type=Standard_DS1_v2
                        beta.kubernetes.io/os=windows
                        failure-domain.beta.kubernetes.io/region=westus2
                        failure-domain.beta.kubernetes.io/zone=0
                        kubernetes.io/hostname=38519acs9011
Annotations:            node.alpha.kubernetes.io/ttl=0
                        volumes.kubernetes.io/controller-managed-attach-detach=true
Taints:                 <none>
CreationTimestamp:      Fri, 06 Oct 2017 18:13:25 +0000
Conditions:
...

System Info:
 Machine ID:                    38519acs9011
 System UUID:
 Boot ID:
 Kernel Version:                10.0 16299 (16299.0.amd64fre.rs3_release.170922-1354)
 OS Image:
 Operating System:              windows
 Architecture:                  amd64
...

Sürümlerin nasıl eşleşeceğini göstermek için şu örneği kullanalım:

  1. Her düğümün adını ve Kernel Version sistem bilgilerinden not alın.

    Bizim örneğimizde bilgiler şu şekilde görünür:

    İsim Sürüm
    38519acs9010 14393.1715.amd64fre.rs1_release_inmarket.170906-1810
    38519acs9011 16299.0.amd64fre.rs3_release.170922-1354
  2. Her düğüme adlı beta.kubernetes.io/osbuildbir etiket ekleyin. Windows Server 2016'nın Hyper-V yalıtım olmadan desteklenmesi için hem ana hem de ikincil sürümlerin (bu örnekte 14393.1715) olması gerekir. Windows Server sürüm 1709'un eşleşmesi için yalnızca ana sürüm (bu örnekte 16299) gerekir.

    Bu örnekte, etiketleri ekleme komutu aşağıdaki gibi görünür:

    $ kubectl label node 38519acs9010 beta.kubernetes.io/osbuild=14393.1715
    
    
    node "38519acs9010" labeled
    $ kubectl label node 38519acs9011 beta.kubernetes.io/osbuild=16299
    
    node "38519acs9011" labeled
    
    
  3. kubectl get node --show-labels komutunu çalıştırarak etiketlerin orada olup olmadığını denetleyin.

    Bu örnekte çıkış şöyle görünür:

    $ kubectl get nodes --show-labels
    
    NAME                        STATUS                     AGE       VERSION                    LABELS
    38519acs9010                Ready,SchedulingDisabled   3d        v1.7.7-7+e79c96c8ff2d8e    beta.kubernetes.io/arch=amd64,beta.kubernetes.io/instance-type=Standard_D2_v2,beta.kubernetes.io/os=windows,beta.kubernetes.io/osbuild=14393.1715,failure-domain.beta.kubernetes.io/region=westus2,failure-domain.beta.kubernetes.io/zone=0,kubernetes.io/hostname=38519acs9010
    38519acs9011                Ready                      3d        v1.7.7-25+bc3094f1d650a2   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/instance-type=Standard_DS1_v2,beta.kubernetes.io/os=windows,beta.kubernetes.io/osbuild=16299,failure-domain.beta.kubernetes.io/region=westus2,failure-domain.beta.kubernetes.io/zone=0,kubernetes.io/hostname=38519acs9011
    k8s-linuxpool1-38519084-0   Ready                      3d        v1.7.7                     agentpool=linuxpool1,beta.kubernetes.io/arch=amd64,beta.kubernetes.io/instance-type=Standard_D2_v2,beta.kubernetes.io/os=linux,failure-domain.beta.kubernetes.io/region=westus2,failure-domain.beta.kubernetes.io/zone=0,kubernetes.io/hostname=k8s-linuxpool1-38519084-0,kubernetes.io/role=agent
    k8s-master-38519084-0       Ready                      3d        v1.7.7                     beta.kubernetes.io/arch=amd64,beta.kubernetes.io/instance-type=Standard_D2_v2,beta.kubernetes.io/os=linux,failure-domain.beta.kubernetes.io/region=westus2,failure-domain.beta.kubernetes.io/zone=0,kubernetes.io/hostname=k8s-master-38519084-0,kubernetes.io/role=master
    
  4. Dağıtımlara düğüm seçicileri ekleyin. Bu örnekte, kapsayıcı tarafından kullanılan temel işletim sistemi ile eşleştirmek için, nodeSelector öğesini kapsayıcı tanımına, beta.kubernetes.io/os = windows ve beta.kubernetes.io/osbuild = 14393.* veya 16299 olarak ekleyeceğiz.

    Aşağıda, Windows Server 2016 için oluşturulmuş bir kapsayıcıyı çalıştırmaya yönelik tam bir örnek verilmişti:

    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      annotations:
        kompose.cmd: kompose convert -f docker-compose-combined.yml
        kompose.version: 1.2.0 (99f88ef)
      creationTimestamp: null
      labels:
        io.kompose.service: fabrikamfiber.web
      name: fabrikamfiber.web
    spec:
      replicas: 1
      strategy: {}
      template:
        metadata:
          creationTimestamp: null
          labels:
            io.kompose.service: fabrikamfiber.web
        spec:
          containers:
          - image: patricklang/fabrikamfiber.web:latest
            name: fabrikamfiberweb
            ports:
            - containerPort: 80
            resources: {}
          restartPolicy: Always
          nodeSelector:
            "beta.kubernetes.io/os": windows
            "beta.kubernetes.io/osbuild": "14393.1715"
    status: {}
    

    Pod, artık güncellenmiş dağıtımla çalışmaya başlayabilir. Düğüm seçicileri kubectl describe pod <podname> içinde de gösterilir, bu yüzden eklendiklerini doğrulamak için bu komutu çalıştırabilirsiniz.

    Örneğimizin çıktısı aşağıdaki gibidir:

    $ kubectl -n plang describe po fa
    
    Name:           fabrikamfiber.web-1780117715-5c8vw
    Namespace:      plang
    Node:           38519acs9010/10.240.0.4
    Start Time:     Tue, 10 Oct 2017 01:43:28 +0000
    Labels:         io.kompose.service=fabrikamfiber.web
                    pod-template-hash=1780117715
    Annotations:    kubernetes.io/created-by={"kind":"SerializedReference","apiVersion":"v1","reference":{"kind":"ReplicaSet","namespace":"plang","name":"fabrikamfiber.web-1780117715","uid":"6a07aaf3-ad5c-11e7-b16e-000d3...
    Status:         Running
    IP:             10.244.1.84
    Created By:     ReplicaSet/fabrikamfiber.web-1780117715
    Controlled By:  ReplicaSet/fabrikamfiber.web-1780117715
    Containers:
      fabrikamfiberweb:
        Container ID:       docker://c94594fb53161f3821cf050d9af7546991aaafbeab41d333d9f64291327fae13
        Image:              patricklang/fabrikamfiber.web:latest
        Image ID:           docker-pullable://patricklang/fabrikamfiber.web@sha256:562741016ce7d9a232a389449a4fd0a0a55aab178cf324144404812887250ead
        Port:               80/TCP
        State:              Running
          Started:          Tue, 10 Oct 2017 01:43:42 +0000
        Ready:              True
        Restart Count:      0
        Environment:        <none>
        Mounts:
          /var/run/secrets/kubernetes.io/serviceaccount from default-token-rw9dn (ro)
    Conditions:
      Type          Status
      Initialized   True
      Ready         True
      PodScheduled  True
    Volumes:
      default-token-rw9dn:
        Type:       Secret (a volume populated by a Secret)
        SecretName: default-token-rw9dn
        Optional:   false
    QoS Class:      BestEffort
    Node-Selectors: beta.kubernetes.io/os=windows
                    beta.kubernetes.io/osbuild=14393.1715
    Tolerations:    <none>
    Events:
      FirstSeen     LastSeen        Count   From                    SubObjectPath                           Type            Reason                  Message
      ---------     --------        -----   ----                    -------------                           --------        ------                  -------
      5m            5m              1       default-scheduler                                               Normal          Scheduled               Successfully assigned fabrikamfiber.web-1780117715-5c8vw to 38519acs9010
      5m            5m              1       kubelet, 38519acs9010                                           Normal          SuccessfulMountVolume   MountVolume.SetUp succeeded for volume "default-token-rw9dn"
      5m            5m              1       kubelet, 38519acs9010   spec.containers{fabrikamfiberweb}       Normal          Pulling                 pulling image "patricklang/fabrikamfiber.web:latest"
      5m            5m              1       kubelet, 38519acs9010   spec.containers{fabrikamfiberweb}       Normal          Pulled                  Successfully pulled image "patricklang/fabrikamfiber.web:latest"
      5m            5m              1       kubelet, 38519acs9010   spec.containers{fabrikamfiberweb}       Normal          Created                 Created container
      5m            5m              1       kubelet, 38519acs9010   spec.containers{fabrikamfiberweb}       Normal          Started                 Started container