认识Minikube
Minikube是一个开源工具,可用于本地开发环境中快速搭建一个单节点的Kubernetes集群。支持多种虚拟化技术,在不同平台上都可以运行,如VirtualBox、Hyper-V、KVM等。
认识Kata
Kata Containers 是由蚂蚁集团开源的容器运行时,借助轻量级虚拟机(VM )构建安全的容器运行时。对比runc容器,Kata Containers 提供了更强的安全隔离以及性能隔离性。
minikube搭建k8s单点集群
测试环境:
ssj@dpvsbak:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.6 LTS
Release: 20.04
Codename: focal
minikube通过kvm2安装虚拟机承载node,并且在node上部署kata容器,相当于嵌套虚拟化。
启动命令:
$ minikube start --vm-driver kvm2 --memory 6144 --network-plugin=cni --enable-default-cni --container-runtime=cri-o --bootstrapper=kubeadm
安装kata容器:
$ git clone https://github.com/kata-containers/kata-containers.git
$ cd kata-containers/tools/packaging/kata-deploy
$ kubectl apply -f kata-rbac/base/kata-rbac.yaml
$ kubectl apply -f kata-deploy/base/kata-deploy.yaml
实践kata容器
需要额外等几分钟就绪:
$ podname=$(kubectl -n kube-system get pods -o=name | fgrep kata-deploy | sed 's?pod/??')
$ kubectl -n kube-system exec ${podname} -- ps -ef | fgrep infinity
验证一:创建kata容器:
$ cd kata-containers/tools/packaging/kata-deploy/runtimeclasses
$ kubectl apply -f kata-runtimeClasses.yaml
$ cd kata-containers/tools/packaging/kata-deploy/examples
$ kubectl apply -f test-deploy-kata-qemu.yaml
验证是否成功,通过以下命令区分kata使用的内核版本是不同于宿主机
$ podname=$(kubectl get pods -o=name | fgrep php-apache-kata-qemu | sed 's?pod/??')
$ kubectl exec ${podname} -- uname -a
验证二:通过nginx容器学习kata网络
ssj@dpvsbak:~/kata-containers/tools/packaging/kata-deploy/examples$ cat sj.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment-qemu
spec:
selector:
matchLabels:
app: nginx
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
runtimeClassName: kata-qemu
containers:
- name: nginx
image: nginx:alpine
ports:
- containerPort: 80
官方介绍的kata网络示意图:
进入nginx pod对应的namespace,查看对应tc mirror规则
另外在node节点进入Pod,可以看到同样的10.244.0.28/16地址
简单测试一下nginx对应Pod提供的服务,可以在虚拟机node发出请求