本地快速搭建Kubernetes单机版实验环境(含问题解决方案)
Posted MCNU云原生
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了本地快速搭建Kubernetes单机版实验环境(含问题解决方案)相关的知识,希望对你有一定的参考价值。
Kubernetes是一个容器编排系统,用于自动化应用程序部署、扩展和管理。本指南将介绍Kubernetes的基础知识,包括基本概念、安装部署和基础用法。
一、什么是Kubernetes?
Kubernetes是Google开发的开源项目,是一个容器编排系统,可以自动化部署、扩展和管理容器化的应用程序。Kubernetes可以跨多个主机管理容器,并提供自动化负载均衡、弹性伸缩、自我修复和滚动更新等功能。
Kubernetes的基本架构由Master和Node组成。Master是集群控制中心,负责管理集群状态、控制应用程序部署和监控应用程序状态。Node是集群的工作节点,运行应用程序容器并将它们与Master通信。
二、Kubernetes的基本概念
在使用Kubernetes之前,需要了解一些基本概念。以下是一些Kubernetes的核心概念:
- Pod:是Kubernetes的最小部署单元,通常包含一个或多个容器。Pod中的容器共享网络和存储,并在同一个主机上运行。
- Deployment:是一种Kubernetes资源对象,用于管理Pod的副本数,并支持滚动更新。
- Service:是一种Kubernetes资源对象,用于将一组Pod公开为一个网络服务,并提供负载均衡。
- Namespace:是一种Kubernetes资源对象,用于隔离不同应用程序或团队的资源。
- ConfigMap:是一种Kubernetes资源对象,用于将应用程序配置信息与容器分离。
- Secret:是一种Kubernetes资源对象,用于存储敏感信息,如密码和API密钥。
三、Kuberntes单机本地部署
Kubernetes有多种安装方式:minikube、kubeadm和二进制包。
- minikube:是一种在本地环境中部署Kubernetes的工具,它可以在单个虚拟机中运行一个Kubernetes集群,一般用于开发、测试环境搭建。
- kubeadm:是一种在物理机或虚拟机中快速部署Kubernetes集群的工具,已被证明可以应用于生成环境的集群搭建。
- 二进制包:手工安装,流程复杂,容易出错,不建议。
这里以minikube为例,展示如何在单机上部署kubernetes,搭建一个本地演示环境。
3.1、安装minikube命令行工具
可以参考官方文档进行安装,具体安装方式可以根据自己的操作系统选择,这里以Centos为例,使用minikube version
可以查看到版本信息。
[root@node1 kubernetes]# curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
[root@node1 kubernetes]# install minikube-linux-amd64 /usr/local/bin/minikube
[root@node1 kubernetes]# minikube version
minikube version: v1.29.0
commit: ddac20b4b34a9c8c857fc602203b6ba2679794d3
3.2、安装docker
minikube可以使用不同的驱动,例如Linux系统下支持Docker、KVM2、VirtualBox、QEMU、None、Podman、SSH。我们这里以最常用的Docker为例,所以需要先安装Docker。
Docker的版本不宜太旧,建议安装最新稳定版。
删除旧的Docker版本:
sudo yum remove docker \\
docker-client \\
docker-client-latest \\
docker-common \\
docker-latest \\
docker-latest-logrotate \\
docker-logrotate \\
docker-engine
设置repository:
sudo yum install -y yum-utils
sudo yum-config-manager \\
--add-repo \\
https://download.docker.com/linux/centos/docker-ce.repo
安装最新版Docker:
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
启动并查询docker状态,看到状态是running
代表已经运行起来了。
sudo systemctl start docker
sudo systemctl status docker
3.3、启动minikube
在命令行中输入以下命令启动minikube:
[k8s@node2 ~]$ minikube start --image-mirror-country=cn --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --driver=docker
其中--driver=docker
指定了使用docker驱动,--image-mirror-country
和--image-repository
是非必须的,只是考虑到国外的源下载速度比较慢,可以替换成国内的加快速度。
启动以后发现启动失败,提示以下问题The kubelet is not running
:
查看输出日志来辅助判断具体原因:
[k8s@node2 ~]$ sudo tail /var/log/messages
发现错误信息为DNS Server相关:
使用sudo vim /etc/resolv.conf
查看DNS配置:
判断相关错误为前期其他实验设置了nameserver,删除相关配置恢复默认设置,然后重启minikube,发现正常启动了。
3.4、部署应用程序
可以使用kubectl命令行工具部署应用程序。以下是一个简单的示例:
kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.4
这将创建一个Deployment,并在其中运行一个Pod,Pod中的容器将运行一个Web服务器。
3.5、公开服务
在Kubernetes中,服务是一种将Pod公开为网络服务的机制。可以使用kubectl创建一个服务,使应用程序可以通过Kubernetes集群中的其他Pod或外部客户端访问。以下是一个示例:
kubectl expose deployment hello-minikube --type=NodePort --port=8080
这将创建一个服务,并将其公开为NodePort类型,使得可以通过Kubernetes集群中任何一个节点的IP地址和NodePort访问到服务。
3.6、访问应用程序:
可以使用kubectl命令行工具获取Minikube节点的IP地址和NodePort,然后在Web浏览器中访问该IP地址和NodePort,以访问应用程序。
minikube service hello-minikube --url
这将返回服务的URL,可以将其复制到Web浏览器中进行访问。
四、kubernetes的基础用法
使用Kubernetes,可以通过Kubernetes API和kubectl命令行工具进行操作。以下是一些基本用法:
4.1、创建和查询Deployment
以下命令创建一个deployment,名为my-deployment,使用镜像busybox。
kubectl create deployment my-deployment --image=busybox
创建完成后使用以下命令可以查看deployment
kubectl get deployments
4.2、创建和查询Pod
kubectl支持json或者yaml格式来创建pod,例如:
$ cat <<EOF | kubectl create -f -
apiVersion: v1
kind: Pod
metadata:
name: my-busybox
spec:
containers:
- name: busybox
image: busybox
EOF
创建完成以后使用kubectl get pods --all-namespaces
可以列出所有 namespace 中的所有 pod。
4.3、手动缩放Pod
可以使用kubectl命令行工具手动缩放Pod的数量,以满足当前的负载需求。例如,可以使用以下命令来将Pod的数量扩展到3个:
kubectl scale deployment my-app --replicas=3
4.4、删除资源
kubectl支持多种形式的删除资源的方法:
-
使用定义文件
删除匹配 pod.json 文件中定义的类型和名称的 pod
kubectl delete -f ./pod.json
-
使用名称
删除指定名称的pod
kubectl delete pod mypod
-
使用标签
删除具有 name=mypod-label标签的pod
kubectl delete pods -l name=mypod-label
-
使用namespace
删除my-ns这个namespace下所有的pod
kubectl -n my-ns delete po --all
kubernetes的用法还有很多,具体可以参考官方文档,不建议死记硬背,而是需要时使用,熟能生巧。
使用kubernetes单机版搭建一个tomcat小网页
一、实验环境虚拟机vmware:Centos7
ip:192.168.213.101
内存:1G
硬盘:16G
二、kubernetes单机版环境搭建
1、关闭CentOS自带的防火墙
systemctl disable firewalld
systemctl stop firewalld
2、安装etcd和Kubernetes软件(会自动安装Docker软件)
yum install -y etcd kubernetes
3、修改配置文件
修改/etc/sysconfig/docker,修改为:
OPTIONS=‘--selinux-enabled=false --insecure-registry gcr.io‘
Kubernetes apiserver配置文件/etc/kubernetes/apiserver中,把--admission_control参数中的ServiceAccount删除
4、配置CentOS证书
参考内容:Kubernetes创建pod一直处于ContainerCreating排查和解决
因为拉取gcr.io的镜像需要redhat的证书,但是系统默认是没有的,所以,这里我们自己添加。
安装rhsm
yum install -y *rhsm*
通过python-rhsm-certificates的rpm包获得证书:
wget?http://mirror.centos.org/centos/7/os/x86_64/Packages/python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm
rpm2cpio python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm | cpio -iv --to-stdout ./etc/rhsm/ca/redhat-uep.pem | tee /etc/rhsm/ca/redhat-uep.pem
5、配置docker阿里云镜像加速
这个镜像仓库是我个人在阿里云申请的:
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-‘EOF‘
{
"registry-mirrors": ["https://ckq4qobq.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
systemctl deamon-reload
systemctl restart docker
6、启动所有服务
systemctl start etcd
systemctl start docker
systemctl start kube-apiserver
systemctl start kube-controller-manager
systemctl start kube-scheduler
systemctl start kubelet
systemctl start kube-proxy
三、搭建服务
从github上下载需要的yaml文件:
需要用到的是 java_web_app 文件夹内内容
下载地址:https://github.com/bestlope/k8s_practice
或者:git clone https://github.com/bestlope/k8s_practice.git
1、搭建mysql服务
cd k8s_practice/java_web_app/mysql
#启动mysql的RC服务
kubectl create -f mysql-rc.yaml
#查看刚刚创建的RC
kubectl get rc
#查看pod创建的情况
kubectl get pods
#启动mysql的SVC服务
kubectl get svc
#查看刚刚创建的service
kubectl get svc
2、启动tomcat应用
cd k8s_practice/java_web_app/tomcat
#创建tomcat的RC服务
kubectl create -f myweb-rc.yaml
#创建tomcat的SVC服务
kubectl create -f myweb-svc.yaml
3、通过浏览器访问网页
访问:192.168.213.101:30001/demo/
成功看到页面,能成功输入数据,即成功搭建。
以上是关于本地快速搭建Kubernetes单机版实验环境(含问题解决方案)的主要内容,如果未能解决你的问题,请参考以下文章
快速搭建实验环境:使用 Terraform 部署 Proxmox 虚拟机