Kompose生成k8s资源

摘要

Kompose(名字与Docker Compose相似),是一个将compose转换成为容器编排(k8s或者OpenShift)的工具。

你必须有个k8s集群,同时kubectl CLI工具必须被正确的配置以连接k8s集群。如果你还没有准备好k8s集群,你可以使用Minikube

使用kubectl version,检查版本信息。

  • Minikube是一种方便在本地运行Kubernetes的工具.
  • Minikube 是可以在VM中运行单节点的Kubernetes集群.
  • Minikube是为了开发或测试在本地启动一个节点的kubernetes集群.
  • 不能启动生产集群,没有高可用性的单节点机器.
  • 可以工作在Windows,Linux,MacOS下.

bash

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

bash

curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
chmod +x minikube
mv minikube /usr/local/bin/

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裸机运行

bash

minikube start --vm-driver=none

执行minikube start会拉取镜像,但是由于GFW,所以会报错拉取不下来,我们可以选择利用docker拉取镜像,最后再修改tag

拉取镜像

bash

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

修改标签

bash

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

标签修改后,查看镜像

bash

docker images

报错:Error restarting cluster: waiting for apiserver: apiserver process never appeared

执行

bash

minikube delete
minikube start --vm-driver=none

仪表板是基于Web的Kubernetes用户界面。您可以使用仪表板将容器化的应用程序部署到Kubernetes集群,对容器化的应用程序进行故障排除以及管理集群资源。您可以使用Dashboard来概述集群上运行的应用程序,以及创建或修改单个Kubernetes资源(例如Deployments,Jobs,DaemonSets等)。例如,您可以使用部署向导来扩展部署,启动滚动更新,重新启动Pod或部署新应用程序。 仪表板还提供有关集群中Kubernetes资源状态以及可能发生的任何错误的信息。

bash

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正处于imagePullBackOffcontainerCreating状态,接着查看pod描述

bash

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。

bash

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

bash

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镜像时,失败了。

bash

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

有多种方式安装kompose,推荐的方式是从GitHub下载2进制包进行安装

bash

# 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

bash

# 安装epel源
yum install epel-release
# 安装kompose
yum -y install kompose

Kompose支持将V1,V2和V3 Docker Compose文件转换为Kubernetes和OpenShift对象。

bash

kompose convert -f docker-compose.yml
ls