Kompose生成k8s资源
Kompose(名字与Docker Compose相似),是一个将compose转换成为容器编排(k8s或者OpenShift)的工具。
1 开始之前
你必须有个k8s集群,同时kubectl CLI工具必须被正确的配置以连接k8s集群。如果你还没有准备好k8s集群,你可以使用Minikube
使用kubectl version
,检查版本信息。
2 安装Minikube
2.1 Minikube是什么?
- Minikube是一种方便在本地运行Kubernetes的工具.
- Minikube 是可以在VM中运行单节点的Kubernetes集群.
- Minikube是为了开发或测试在本地启动一个节点的kubernetes集群.
2.2 特点
- 不能启动生产集群,没有高可用性的单节点机器.
- 可以工作在Windows,Linux,MacOS下.
2.3 先决条件
2.3.1 安装 kubectl
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.16.0/bin/linux/amd64/kubectl
chmod +x kubectl
mv kubectl /usr/local/bin/kubectl
2.3.2 安装Minikube
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
chmod +x minikube
mv minikube /usr/local/bin/
2.3.2.1 启动Minikube
If you are running within a VM, your hypervisor does not allow nested virtualization. You will need to use the None (bare-metal) driver
缺省Minikube使用VirtualBox驱动来创建Kubernetes本地环境,因为服务本身已经安装在vm虚拟机上,所以这里使用--vm-driver=none
裸机运行
minikube start --vm-driver=none
执行minikube start
会拉取镜像,但是由于GFW,所以会报错拉取不下来,我们可以选择利用docker拉取镜像,最后再修改tag
拉取镜像
docker pull kubeimage/kube-apiserver-amd64:v1.16.0
docker pull kubeimage/kube-controller-manager-amd64:v1.16.0
docker pull kubeimage/kube-scheduler-amd64:v1.16.0
docker pull kubeimage/kube-proxy-amd64:v1.16.0
docker pull kubeimage/pause-amd64:3.1
docker pull kubeimage/etcd-amd64:3.3.15-0
docker pull coredns/coredns:1.6.2
修改标签
docker tag kubeimage/kube-apiserver-amd64:v1.16.0 k8s.gcr.io/kube-apiserver:v1.16.0
docker tag kubeimage/kube-controller-manager-amd64:v1.16.0 k8s.gcr.io/kube-controller-manager:v1.16.0
docker tag kubeimage/kube-scheduler-amd64:v1.16.0 k8s.gcr.io/kube-scheduler:v1.16.0
docker tag kubeimage/kube-proxy-amd64:v1.16.0 k8s.gcr.io/kube-proxy:v1.16.0
docker tag kubeimage/pause-amd64:3.1 k8s.gcr.io/pause:3.1
docker tag kubeimage/etcd-amd64:3.3.15-0 k8s.gcr.io/etcd:3.3.15-0
docker tag coredns/coredns:1.6.2 k8s.gcr.io/coredns:1.6.2
标签修改后,查看镜像
docker images
报错:Error restarting cluster: waiting for apiserver: apiserver process never appeared
执行
minikube delete
minikube start --vm-driver=none
2.3.2.2 开启Minikube dashboard
仪表板是基于Web的Kubernetes用户界面。您可以使用仪表板将容器化的应用程序部署到Kubernetes集群,对容器化的应用程序进行故障排除以及管理集群资源。您可以使用Dashboard来概述集群上运行的应用程序,以及创建或修改单个Kubernetes资源(例如Deployments,Jobs,DaemonSets等)。例如,您可以使用部署向导来扩展部署,启动滚动更新,重新启动Pod或部署新应用程序。 仪表板还提供有关集群中Kubernetes资源状态以及可能发生的任何错误的信息。
minikube dashboard
报错:dashboard service is not running: Temporary Error: Error getting service kubernetes-dashboard: services “kubernetes-dashboard” not found
通过查看所有namespaces的pod,我们可以看到kube-addon-manager-minikube正处于imagePullBackOff
或containerCreating
状态,接着查看pod描述
kubectl get pod --all-namespaces
kubectl describe --namespace=kube-system pod kube-addon-manager-minikube
我们可以获知这个pod在尝试拉取k8s.gcr.io/kube-addon-manager:v9.0.2
镜像时,失败了。通过拉取docker hub镜像,再更改镜像的tag。
docker pull kubeimage/kube-addon-manager-amd64:v9.0.2
docker tag kubeimage/kube-addon-manager-amd64:v9.0.2 k8s.gcr.io/kube-addon-manager:v9.0.2
宿主机浏览器访问
如果是centos 7 minimal只有终端环境,所以我们要在宿主机上进行浏览器访问,不需要执行minikube dashboard,使用如下命令开启proxy
kubectl proxy --address='0.0.0.0' --accept-hosts='^*$'
并且使用如下地址访问即可
http://ip:8001/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy
查看所有namespaces的pod,看到还有异常的pod
同样,minikube虚拟机在尝试拉取gcr.io/k8s-minikube/storage-provisioner:v1.8.1
镜像时,失败了。
docker pull dieudonnecc/storage-provisioner:v1.8.1
docker tag dieudonnecc/storage-provisioner:v1.8.1 gcr.io/k8s-minikube/storage-provisioner:v1.8.1
3 安装Kompose
有多种方式安装kompose,推荐的方式是从GitHub下载2进制包进行安装
3.1 GitHub release
# Linux
curl -L https://github.com/kubernetes/kompose/releases/download/v1.19.0/kompose-linux-amd64 -o kompose
# macOS
curl -L https://github.com/kubernetes/kompose/releases/download/v1.19.0/kompose-darwin-amd64 -o kompose
chmod +x kompose
sudo mv ./kompose /usr/local/bin/kompose
3.2 CentOs
# 安装epel源
yum install epel-release
# 安装kompose
yum -y install kompose
4 使用手册
4.1 kompose convert
Kompose支持将V1,V2和V3 Docker Compose文件转换为Kubernetes和OpenShift对象。
kompose convert -f docker-compose.yml
ls