前言
Kubernets现在这么火,我们再不学学真怕调队了,我学习一门新东西的办法就是快速上手去体验一番,那些具体的概念可以先放一放;俗话说:工欲善其事,必先利其器,那么我们就先快速地搭建一个环境来体验下。
安装的方式
Kubernets官方提供三种部署方式:
-
MiniKube: Minikube可以实现一种轻量级的Kubernetes集群,通过在本地计算机上创建虚拟机并部署只包含单个节点的简单集群。Minikube适用于Linux,MacOS和Windows系统。Minikube CLI提供集群管理的基本操作,包括 start、stop、status、 和delete。
-
kubeadm: kubeadm是Kubernetes1.6开始官方推出的快速部署Kubernetes集群工具,其思路是将Kubernetes相关服务容器化(Kubernetes静态Pod)以简化部署。
-
Custom solutions: 最完整的方式,从零开始搭建。
显而易见,MiniKube的方式是最简单的,下面我们就来介绍这种安装方式,主要是想把里面的坑给大家说说。
Minikube
环境:MacOS
minikube其实就是启动了一个Linux 虚拟机,这里虚拟机中包含Docker容器、Kubernetes的全部组件。所以需要你的环境支持虚拟化,目前Mac支持的虚拟化有xhyve driver, VirtualBox, or VMware Fusion,这些需要先准备好。
-
安装kubectl
brew install kubectl kubectl version
-
Install Minikube
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64 && \ chmod +x minikube && \ sudo mv minikube /usr/local/bin/
-
通过minikube启动一个k8s的集群
# 指定了hypervisor, 我这里使用的是VirtualBox minikube start --vm-driver=virtualbox
通过minikube start之后,你就可以在virtualbox中看到一台新建的虚拟机了, 同时在命令行可以输入
minikube virtualbox.pngminikube ssh
就能直接登入到虚拟机了,更多命令请见minikube --help
:
另:部署kubernets dashboard
kubectl create -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
启动一个容器并提供服务
以上的步骤完成都很轻松,下面我们就使用kubetl
启动一个容器并提供服务:
创建一个deployment
kubectl run hello-world --image=nginx:1.7.9 --port=80
查看deplopment:
kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
hello-world 1 1 1 0 8s
查看pod:
kubectl get pods
可以看到pod一直处于ContainerCreating
状态
NAME READY STATUS RESTARTS AGE
hello-world-277264851-r8q3n 0/1 ContainerCreating 0 17s
使用kubectl describe pods hello-world-277264851-r8q3n
看下这个pod, 可以看到一个Error syncing pod
:
使用minikube logs
来查看下有什么错误:
Oct 27 02:55:21 minikube localkube[3057]: E1027 02:55:21.404996 3057 kuberuntime_sandbox.go:54] CreatePodSandbox for pod "nginx-deployment-431080787-6w421_default(7d61ad84-bac1-11e7-a3f5-080027bf293b)" failed: rpc error: code = 2 desc = unable to pull sandbox image "gcr.io/google_containers/pause-amd64:3.0": Error response from daemon: {"message":"Get https://gcr.io/v1/_ping: dial tcp 74.125.204.82:443: i/o timeout"}
可以看到连接gcr.io的仓库超时了,所以就需要翻墙了,下面假设你有个支持http proxy的网络代理翻墙;(Mac上可以直接使用shadowsocks-NG开启HTTP的支持, 如果是shadowsocks, 就需要使用privoxy将sock5转换成http)
这里有个问题需要注意下,开启Mac上的shadowsocks并不会对terminal下生效, 你需要有个http proxy,在terminal中export http_proxy=x.x.x.x, 大部分的 Linux 程序都会感知这两个环境变量,并使用代理访问网络;
在使用minikue
启动集群的时候指定代理地址(因为只支持http代理模式):
https_proxy=<my proxy> minikube start --docker-env HTTP_PROXY=<my proxy> --docker-env HTTPS_PROXY=<my proxy> --docker-env NO_PROXY=192.168.99.0/24
这时候查看deployment和pod都running了
kubectl get pods
NAME READY STATUS RESTARTS AGE
hello-world-277264851-pbb3l 1/1 Running 0 16s
kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
hello-world 1 1 1 1 43s
接着使用service为容器暴露一个对外访问的端口:
kubectl expose deployment hello-world --type=NodePort
查看刚创建的serivce:
kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-world NodePort 10.0.0.72 <none> 80:32078/TCP 14m
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 55m
minibute service将打开你本地的浏览器去访问这个应用,
# minikube service [-n NAMESPACE] [--url] NAME
# --url:将返回访问的URL
minikube service hello-world
nginx.png
最后
其实搭建还是挺简单的,大部分时间都是花在网络问题上,环境有了,接下来就应该去熟悉kubernets里面的概念了,什么是pods, deployments, services等等,期待下篇吧!
网友评论