前言

kubernetes,简称K8s,是用8代替名字中间的8个字符ubernete而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。

minikube 是本地Kubernetes,易于学习和开发,只需要一个Docker或虚拟机环境。

K8S特点

  • 可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)
  • 可扩展: 模块化,插件化,可挂载,可组合
  • 自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展

安装K8S安装工具 kubectl

安装kubectl本体

kubectl 版本和集群版本之间的差异必须在一个小版本号内。 例如:v1.23 版本的客户端能与 v1.22、 v1.23 和 v1.24 版本的控制面通信。 用最新兼容版的 kubectl 有助于避免不可预见的问题。

Centos

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
       http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

sudo yum install -y kubectl

其他

其他安装方式

安装kubectl插件

kubectl 为 Bash、Zsh、Fish 和 PowerShell 提供自动补全功能,可以为你节省大量的输入。

安装 bash-completion

yum install bash-completion

启动 kubectl 自动补全功能

echo 'source <(kubectl completion bash)' >>~/.bashrc
kubectl completion bash >/etc/bash_completion.d/kubectl
echo 'alias k=kubectl' >>~/.bashrc
echo 'complete -F __start_kubectl k' >>~/.bashrc

安装kubectl convert插件

一个 Kubernetes 命令行工具 kubectl 的插件,允许你将清单在不同 API 版本间转换。 在将清单迁移到具有较新 Kubernetes 版本的未弃用 API 版本时,这个插件特别有用。

安装最新版

curl -LO https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl-convert

sudo install -o root -g root -m 0755 kubectl-convert /usr/local/bin/kubectl-convert

验证插件是否安装成功

kubectl convert --help
#若无错误提示 则安装成功

minikube

minikube 仅支持单节点,无法很好的去体验K8S的自动调度的场景

安装minikube

配置需求

内容需求
CPU2+
内存2GB+
磁盘空间20GB+
网络连接畅通
容器或虚拟机DockerHyperkitHyper-VKVMParallelsPodmanVirtualBoxVMware Fusion/Workstation

安装

x86-64

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

ARM64

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-arm64
sudo install minikube-linux-arm64 /usr/local/bin/minikube

ARMv7

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-arm
sudo install minikube-linux-arm /usr/local/bin/minikube

添加用户并切换

The "docker" driver should not be used with root privileges.

运行k8s 不能在root用户上

adduser k8s
passwd k8s #设置密码
sudo usermod -aG docker k8s #此处默认已安装docker

#添加sudoers权限
visudo
#找到 
root    ALL=(ALL)       ALL
#添加以下
k8s ALL=(ALL) ALL
#保存退出
:wq 

su k8s

启动minikube

minikube start

成功提示:

* Centos 7.9.2009 上的 minikube v1.24.0
* 自动选择 docker 驱动
* Starting control plane node minikube in cluster minikube
* Pulling base image ...
* Downloading Kubernetes v1.22.3 preload ...
    > preloaded-images-k8s-v13-v1...: 501.73 MiB / 501.73 MiB  100.00% 10.10 Mi
    > index.docker.io/kicbase/sta...: 355.78 MiB / 355.78 MiB  100.00% 3.06 MiB
! minikube was unable to download gcr.io/k8s-minikube/kicbase:v0.0.28, but successfully downloaded docker.io/kicbase/stable:v0.0.28 as a fallback image
* Creating docker container (CPUs=2, Memory=2200MB) ...
! This container is having trouble accessing https://k8s.gcr.io
* To pull new external images, you may need to configure a proxy: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/
* 正在 Docker 20.10.8 中准备 Kubernetes v1.22.3…
  - Generating certificates and keys ...
  - Booting up control plane ...
  - Configuring RBAC rules ...
* Verifying Kubernetes components...
  - Using image gcr.io/k8s-minikube/storage-provisioner:v5
* Enabled addons: storage-provisioner, default-storageclass
* Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default

与集群交互

kubectl get po -A
#效果
NAMESPACE              NAME                                         READY   STATUS    RESTARTS        AGE
kube-system            coredns-78fcd69978-xzxmd                     1/1     Running   0               3m43s
kube-system            etcd-minikube                                1/1     Running   0               3m59s
kube-system            kube-apiserver-minikube                      1/1     Running   0               3m57s
kube-system            kube-controller-manager-minikube             1/1     Running   0               3m56s
kube-system            kube-proxy-llbrn                             1/1     Running   0               3m43s
kube-system            kube-scheduler-minikube                      1/1     Running   0               3m57s
kube-system            storage-provisioner                          1/1     Running   1 (3m22s ago)   3m56s
kubernetes-dashboard   dashboard-metrics-scraper-5594458c94-27thx   1/1     Running   0               2m17s
kubernetes-dashboard   kubernetes-dashboard-654cf69797-w55b4        1/1     Running   0               2m17s

部署一个项目

  • 创建一个实例部署,例如:hexo

    #使用一个hexo镜像进行部署
    kubectl create deployment hexo --image=taskbjorn/hexo
    kubectl expose deployment hexo --type=NodePort --port=4000 #此处为容器内部端口
  • 端口转发,使用容器部署的机器8080端口访问

    kubectl port-forward service/hexo 8080:4000
    
    localhost:8080

部署一个可以负载均衡的项目

  • 创建一个负载均衡项目,例如:hexo

    kubectl create deployment hexo-balanced --image=taskbjorn/hexo
    kubectl expose deployment hexo-balanced --type=LoadBalancer --port=4000
  • 启动隧道命令来访问负载均衡部署

    minikube tunnel
    
    
    Status:
            machine: minikube
            pid: 67514
            route: 10.96.0.0/12 -> 192.168.49.2
            minikube: Running
            services: [hexo-balanced]
        errors:
                    minikube: no errors
                    router: no errors
                    loadbalancer emulator: no errors
    Status:
            machine: minikube
            pid: 67514
            route: 10.96.0.0/12 -> 192.168.49.2
            minikube: Running
            services: [hexo-balanced]
        errors:
                    minikube: no errors
                    router: no errors
                    loadbalancer emulator: no errors
  • 获取路由的ip,并通过一下命令通过EXTERNAL-IP 访问

    kubectl get services balanced
    
    NAME            TYPE           CLUSTER-IP     EXTERNAL-IP    PORT(S)          AGE
    hexo-balanced   LoadBalancer   10.100.43.73   10.100.43.73   4000:31070/TCP   12m

    访问地址为:10.100.43.73:4000

管理集群

暂停Kubernetes

在不影响部署的应用程序情况下
minikube pause


* Pausing node minikube ...
* Paused 18 containers in: kube-system, kubernetes-dashboard, storage-gluster, istio-operator
可见minikube基础服务已停止,但是以上已部署的 hexo hexo-balanced 仍然可以正常访问

取消暂停

可以理解为上节的反向操作
minikube unpause

停止集群

此命令将所有的服务将暂停
minikube stop

增加默认内存限制

需要重启
minikube config set memory 16384

浏览易于安装的 K8S 服务目录

minikube addons list
  • 开启一个服务

    minikube addons enable <name>
  • 启动是启动插件

    minikube start --addons <name1> --addons <name2>
  • 禁用插件

    minikube addons disable <name>
  • 快速打开浏览器断点插件

    minikube addons open <name>

删除所有 minikube 集群

慎用

minikube delete --all
如果觉得我的文章对你有用,请随意赞赏