Windows Container有两种隔离运行模式Hyper-V和Process, 参见:Isolation Modes
两种模式下的host的OS版本与containter的OS版本存在兼容性又不相同,参见:Windows container version compatibility
很明显Hyper-V模式的兼容性要比Process模式要好,向下兼容,也就是高版本的host OS可以运行低版本的container OS, 反之不行;
而Process模式下Windows Server中则要求host OS与container OS的版本完全相同, Windows 10中则不支持Process模式.
某一天,我想在Kubernetes Windows 节点中以Hyper-V模式运行Container, 于是乎发现1.17的文档中写道:
Note: In this document, when we talk about Windows containers we mean Windows containers with process isolation. Windows containers with Hyper-V isolation is planned for a future release.
不甘心又google了一下,发现:
1. 有人提了bug, 已经被修复了: https://github.com/kubernetes/kubernetes/issues/58750
2. 代码也merge了: https://github.com/kubernetes/kubernetes/pull/58751
3. 有人在测试过程中遇到问题,也解决了: https://github.com/kubernetes/kubernetes/issues/62812
但我测试的过程中却提示:
Error response from daemon: CreateComputeSystem test: The container operating system does not match the host operating system.
我的环境:
Kubernetes Ver: 1.14.8
Kubernetes Node OS Ver: Windows Server Datacenter 10.0.17763.504, 属于1809的版本
Container Base Image: windowsservercore-1709
Deployment yaml:
apiVersion: apps/v1beta2 kind: Deployment metadata: labels: app: test name: test namespace: default spec: replicas: 1 selector: matchLabels: app: test template: metadata: annotations: experimental.windows.kubernetes.io/isolation-type: hyperv labels: app: test ...
然后对比了下github别人试成功的deployment yaml, 发现人家用的是apps/v1
apiVersion: apps/v1
kind: Deployment
metadata:
name: whoami
labels:
app: whoami
spec:
...
目前在k8s中启用hyperv isolation的三个条件:
- kubelet 启用参数: –feature-gates=HyperVContainer=true
- Pod/Deployment apiVersion: apps/v1
- spec.template.metadata.annotations[].experimental.windows.kubernetes.io/isolation-type:hyperv
目前我的云提供商给的kubernetes 1.14.8又不支持apps/v1 …
于是乎,我要么等提供商升级kubernetes,要么自己升级container OS跟kubernetes node OS一样…
Hi,
Really liking your website!
If you require any cloud work done please get in touch, we’d
be honoured to help you out.