什么是K8S(Kubernetes)
Kubernetes是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。
通过Kubernetes你可以:
- 快速部署应用
- 快速扩展应用
- 无缝对接新的应用功能
- 节省资源,优化硬件资源的使用
什么是minikube
Minikube 是一种轻量级的 Kubernetes 实现,可在本地计算机上创建 VM 并部署仅包含一个节点的简单集群。 Minikube 可用于 Linux , macOS 和 Windows 系统。Minikube CLI 提供了用于引导集群工作的多种操作,包括启动、停止、查看状态和删除。
Minikube一般用于本地开发、测试和学习。
服务器配置
实验的服务器配置
操作系统:CentOS7.6
CPU核心数:2核
内存:4G
一般2核2G应该是足够支撑
安装Docker
卸载旧版本(如果安装过旧版本的话)
1
|
yum remove docker docker-common docker-selinux docker-engine
|
安装需要的软件包
1
|
yum install -y yum-utils device-mapper-persistent-data lvm2
|
设置yum源
1
|
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
|
查看可安装版本
1
|
yum list docker-ce --showduplicates | sort -r
|
安装
这里我选择了20.10.9的版本,因为minikube对Docker有版本要求,太高会不支持
1
|
yum install -y docker-ce-20.10.9-3.el7
|
安装minikube
这里使用了阿里云的镜像,官方包需要翻墙或者速度贼慢
1
|
curl -Lo minikube https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.23.1/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
|
启动minikube
方法一(不建议)
需要良好网络环境,最好是科学上网,不然等待时间会很久而且不一定能成功
方法二(使用国内镜像)
1
|
minikube start --image-mirror-country='cn'
|
方法三
如果启动失败·,可以尝试使用以下命令
1
|
minikube start --registry-mirror=https://registry.docker-cn.com --image-mirror-country='cn' --kubernetes-version=v1.23.3
|
方法四(本人成功启动)
1
|
minikube start --force --driver=docker --image-repository=http://registry.cn-hangzhou.aliyuncs.com/google_containers
|
minikube常用配置参数
–driver=*** 从1.5.0版本开始,Minikube缺省使用系统优选的驱动来创建Kubernetes本地环境,比如您已经安装过Docker环境,minikube 将使用 docker 驱动
–cpus=2: 为minikube虚拟机分配CPU核数
–memory=2048mb: 为minikube虚拟机分配内存数,如果有足够的资源,可以考虑分配多一点cpu和内存。
–registry-mirror=*** 为了提升拉取Docker Hub镜像的稳定性,可以为 Docker daemon 配置镜像加速,参考阿里云镜像服务
–kubernetes-version=***: minikube 虚拟机将使用的 kubernetes 版本
如下命令将自动使用阿里云服务来支持minikube的环境配置
1
|
minikube start --image-mirror-country='cn'
|
安装kubectl
1
2
3
|
curl -Lo kubectl http://kubernetes.oss-cn-hangzhou.aliyuncs.com/kubernetes-release/release/v1.22.1/bin/linux/amd64/kubectl
mv kubectl /usr/bin
chmod a+x /usr/bin/kubectl
|
验证Pod和Node是否正常启用
1
2
3
4
5
6
7
8
9
|
[root@VM-20-4-centos ~]# kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-7d89d9b6b8-jh8br 1/1 Running 0 5m14s
kube-system etcd-minikube 1/1 Running 0 5m26s
kube-system kube-apiserver-minikube 1/1 Running 0 5m26s
kube-system kube-controller-manager-minikube 1/1 Running 0 5m26s
kube-system kube-proxy-88l8s 1/1 Running 0 5m14s
kube-system kube-scheduler-minikube 1/1 Running 0 5m28s
kube-system storage-provisioner 1/1 Running 1 (4m43s ago) 5m25s
|
1
2
3
|
[root@VM-20-4-centos ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
minikube Ready control-plane,master 6m58s v1.22.1
|
卸载minikube
1
2
3
4
5
6
7
8
|
minikube stop
minikube delete
docker stop (docker ps -aq)
rm -r ~/.kube ~/.minikube
sudo rm /usr/local/bin/localkube /usr/local/bin/minikube
systemctl stop '*kubelet*.mount'
sudo rm -rf /etc/kubernetes/
docker system prune -af –volumes(清理docker没有使用的数据,包括镜像数据,已经停止的容器)
|
常见问题
ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables
临时解决办法:(重启消失
1
2
3
|
echo "1">/proc/sys/net/bridge/bridge-nf-call-iptables
echo "1">/proc/sys/net/bridge/bridge-nf-call-ip6tables
|
永久解决方法:
在/etc/sysctl.conf中添加:
1
2
|
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
|
执行sysctl -p 时刷新
Sorry, Kubernetes 1.22.1 requires conntrack to be installed in root's path
这是缺少conntrack,使用yum安装即可
1
2
|
yum install epel-release
yum install conntrack-tools
|
failed to pull image gcr.azk8s.cn/google-containers/kube-apiserver:v1.23.3: output: Error response from daemon: error parsing HTTP 403 response body
这个出现在用方法二启动minikube,改为方法四则能成功启动
常用命令
minikube 常用命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
# 检查安装结果
minikube help
minikube status
kubectl version
kubectl get nodes
kubectl get pods -A
# 查询运行的 pod
minikube kubectl -- get po -A
# 挂起虚拟机
minikube pause
# 停止虚拟机
minikube stop
# 修改虚拟机内存配置
minikube config set memory 16384
# 查看 minikube 的安装目录列表
minikube addons list
# 启动 dashboard 控制台
minikube dashboard
curl 127.0.0.1:23341
# 删除所有 minikube 虚拟机
minikube delete --all
# 部署目录
/var/lib/kubelet
/var/lib/minikube
# 使用minikube导入镜像,当本地镜像总是无法找到时,可以留意这个这种方式
minikube load xxx.tar
# 启动minikube
minikube start --force --driver=docker --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers
|
K8S 常用命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
# 创建带有终端的 Pod,并进入(后续测试用)
kubectl run busybox --image=busybox -it
# 部署 app 进行测试
kubectl run nginx02 --image=nginx
kubectl run hello-minikube --image=k8s.gcr.io/echoserver:1.4 --port=8081
# deployment
kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.4
kubectl expose deployment hello-minikube --type=NodePort --port=8080
kubectl get service hello-minikube
# 使用 minikube 访问服务
minikube service hello-minikube
# 使用端口映射访问服务
kubectl port-forward service/hello-minikube 7080:8080
curl http://localhost:7080/
# 使用 LB 类型的 deployment 测试
kubectl create deployment balanced --image=k8s.gcr.io/echoserver:1.4
kubectl expose deployment balanced --type=LoadBalancer --port=8080
minikube tunnel
kubectl get services balanced
|
参考文章
参考文章1:https://zhuanlan.zhihu.com/p/574759499
参考文章2:https://zhuanlan.zhihu.com/p/567603673