请注意,本文编写于 1009 天前,最后修改于 640 天前,其中某些信息可能已经过时。
前言
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
配置需求
内容 | 需求 |
---|---|
CPU | 2+ |
内存 | 2GB+ |
磁盘空间 | 20GB+ |
网络连接 | 畅通 |
容器或虚拟机 | Docker、Hyperkit、Hyper-V、KVM、Parallels、Podman、VirtualBox或VMware 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