Kubernetes部署篇:本地开发测试环境搭建

本文侧重于入门Kubernetes时的本地开发测试环境搭建,及minikube的使用.

尤其在国内使用时需要开启网络代理,否则会因为访问Google的一些服务失败而造成各种运行失败的问题.

Mac单节点体验

先安装相应的几个工具:

后续命令:

    chmod +x minikube-darwin-amd64
    mv minikube-darwin-amd64 /usr/local/bin/minikube
    brew install kubectl

验证环境正确:

注: 进行前需梯子,否则第一步下载localkube可能失败,产生如下错误
Error creating localkube asset from url: Error opening file asset: open /Users/xulz/.minikube/cache/localkube/localkube-v1.8.0: no such file or directory
进而导致之后Pod的状态一直是ContainerCreating
    # 确保本机已安装VirtualBox
    minikube start
    kubectl run hello-minikube --image=gcr.io/google_containers/echoserver:1.4 --port=8080
    # 检查Pod是否已运行, 需要从ContainerCreating更新为Running
    kubectl get pod
    # 如果一直是ContainerCreating, 检查错误原因
    kubectl describe pods
    # 页面应该可访问
    curl $(minikube service hello-minikube --url)
    # 查看Dashboard
    minikube dashboard
    # 不用时清除
    kubectl delete deployment hello-minikube
    minikube stop

Ubuntu多节点

使用工具conjure-up搭建本地测试/开发环境, 本身基于juju部署工具.

官方支持2种部署模式:

  • kubernetes-core : (Staging环境) 1个Master节点+1个Worker节点

  • canonical-kubernetes: (生产环境) 2 masters, 3 workers, 3 etc nodes 及API Load Balance

    # 本地安装使用kubectl
    sudo snap install kubectl --classic
    # 准备阶段
    sudo snap install conjure-up --classic
    sudo snap install lxd
    newgrp lxd
    sudo usermod -a -G lxd xulz
    /snap/bin/lxd init
    # 需要重启机器
    sudo reboot
    # 禁用IPv6, conjure-up基于的juju暂时不支持
    lxc network set lxdbr0 ipv6.address none

使用图像界面安装

    conjure-up kubernetes
    # 对于Docker的虚拟网络插件,这里选择默认的Flannel
    # 安装过程需开启梯子, gcr.io 不可访问

Kubernetes常用网络插件: flannel, calico, weave

这里的网络也称作SDN(软件定义网络), 通常基于CNI: Container Network Interface/容器网络接口

juju常用命令

在查看运行环境及问题排查时常会用到的命令.

    juju controllers
    # Models 有2个是因为包含内置的管理模块default
    # 查看当前的 Controller, Model, User
    juju whoami
    # 显示当前应用状态
    juju status
    # 远程登录到master
    # 日志存放在 /var/log/juju/
    juju ssh kubernetes-master/0
    # 获取当前controller名称
    juju switch
    # 卸载停止controller
    juju destroy-controller <上一步得到的名字> --destroy-all-models
    # 单独卸载 model
    juju destroy-model <model_name>

资源

注: gcr(Google Container Registry)的URL结构是gcr.io/{PROJECT_ID}/{image}:tag,在国内不可访问,请使用以上镜像.