腾讯云服务器下使用k8s集群
进入云原生时代,Kubernetes作为云原生的技术基石,一直是IT技术人学习与研究的方向。无论是开发者还是运维人员,在技术不断发展的今天,只有不断学习和提高自己,才能走得更高更远。作为国内领先的云计算服务商之一,腾讯云提供了云服务器产品,可以满足不同规模企业的需求,提供高性能、高可靠、高安全的云计算服务。我们个人可以借助腾讯云的平台与服务,提升自己的技术水平。
一、前言
进入云原生时代,Kubernetes作为云原生的技术基石,一直是IT技术人学习与研究的方向。无论是开发者还是运维人员,在技术不断发展的今天,只有不断学习和提高自己,才能走得更高更远。作为国内领先的云计算服务商之一,腾讯云提供了云服务器产品,可以满足不同规模企业的需求,提供高性能、高可靠、高安全的云计算服务。我们个人可以借助腾讯云的平台与服务,提升自己的技术水平。本次实践基于腾讯云的CVM云服务器,在centos7操作系统下,使用Minikube来部署一个Kubernetes集群,并安装KubePi作为多集群可视化工具来管理Kubernetes集群。同时,在Kubernetes环境下部署Nginx应用来进行测试。通过以上实践,我们可以更好地了解和熟悉Kubernetes的部署和管理,并且掌握使用KubePi进行集群可视化管理的技巧。这将有助于我们在云原生时代更好地应对技术挑战,并提升自己在云计算领域的竞争力。
二、相关名词介绍
2.1 注册或登录腾讯云
首先点击:注册或登录腾讯云
点击:注册并关联
注册成功之后打开,个人中心 点击实名认证
如已经有账号,则点击:我已经有腾讯云账号,登录后再关联
2.2 CVM云服务器介绍
腾讯云服务器(Cloud Virtual Machine,CVM)是一种安全可靠的弹性计算服务。您可以根据业务需求实时调整计算资源的规模,实现资源的快速扩展和缩减,并按实际使用的资源进行计费。使用CVM可以有效降低软硬件采购成本,简化IT运维工作。
2.3 minikube介绍
minikube简介:
Minikube是一个用于快速在macOS、Linux和Windows上设置本地Kubernetes集群的工具。它通过在本机启动一个虚拟环境,并在该环境中安装各种Kubernetes组件来实现这一功能。Minikube可以帮助开发人员在本地环境中轻松地测试、开发和部署应用程序,而无需依赖于真实的生产环境。通过使用Minikube,开发人员可以更加方便地进行Kubernetes相关的开发和调试工作。
minikube特点:
- 支持最新的 Kubernetes 版本
- 跨平台(Linux,macOS,Windows)
- 部署为 VM、容器或裸机上
- 多个容器运行时(CRI-O、containerd、docker)
- 直接 API 端点,用于快速加载和构建映像
- 高级功能,如负载平衡器、文件系统挂载、功能门和网络策略
- 用于易于安装的 Kubernetes 应用程序的插件
- 支持常见的 CI 环境
2.4 kubernetes介绍
Kubernetes(也称为K8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。它提供了一个可靠的方式来处理容器化应用程序的部署和管理,使开发人员能够专注于应用程序的开发,而不必担心底层基础设施的管理。Kubernetes可以在多个主机上运行容器化应用程序,并提供容器的自动化编排和管理。它可以自动处理容器的调度、负载均衡、存储和网络等方面的任务,以确保应用程序在集群中可靠且高效地运行。Kubernetes还提供了一套API和命令行工具,使用户能够管理和监控集群、部署和更新应用程序、进行故障排除和调试等操作。它支持多种容器运行时,包括Docker和Containerd等。
2.5 KubePi介绍
KubePi 是一个现代化的 K8s 面板:KubePi 允许管理员导入多个 Kubernetes 集群,并且通过权限控制,将不同 cluster、namespace 的权限分配给指定用户。它允许开发人员管理 Kubernetes 集群中运行的应用程序并对其进行故障排查,供开发人员更好地处理 Kubernetes 集群中的复杂性。
三、本次实践规划
3.1 本次实践介绍
1.本次实践基于腾讯云CVM云服务器环境; 2.本次实践使用的操作系统为centos7 ; 3.在一台CVM上使用Minikube来部署一个单节点Kubernetes集群; 4.部署一个Nginx测试应用; 5.在CVM云服务器上部署KubePi工具来管理k8s集群。
3.2 本次实践规划
Minikube部署轻量级k8s集群环境要求::
- 2 个或更多 CPU
- 2GB 可用内存
- 20GB 可用磁盘空间
- 互联网连接
- 容器或虚拟机管理器,例如:Docker,QEMU,Hyperkit,Hyper-V,KVM,Parallels,Podman,VirtualBox或VMware Fusion/工作站
本次实践环境具体规划如下:
hostname | 本地IP地址 | Docker版本 | 操作系统版本 | CPU核数 | 内存 | 硬盘 | minikube版本 | k8s版本 |
---|---|---|---|---|---|---|---|---|
k8s | 172.28.0.15 | 23.0.5 | centos7 | 4 | 16G | 50G | v1.30.1 | v1.26.3 |
四、购买CVM云服务器
4.1 购买云服务器
腾讯云CVM官网地址:https://cloud.tencent.com/product/cvm
自定义配置——基础配置:
- 计费模式:按需计费
- 地域:选择国外地区,方便后面拉取镜像。
- 可用区:随机可用区,自定义选择即可。
- 实例配置:这里选择实例已选实例 S5.LARGE16(标准型S5,4核 16GB)
- 实例规格:S5.LARGE16(标准型S5,4核 16GB)
- 镜像:公共镜像,
- 存储:默认选择50G SSD规格 点击“下一步”,设置网络和主机。
网络与主机配置:
- 网络:选择默认的VPC或者新建VPC,根据自身需要选择。
- 公网IP:勾选“分配独立公网IP”。
- 线路类型:BGP
- 带宽计费模式:按流量计费
- 带宽值:100Mbps
- 安全组:新建安全组,配置默认即可,后面服务需要放行安全组端口,则再行设置即可。
- 实例名称:my-k8s,自定义设置即可。
- 登录方式:设置密码登录,设置云服务器访问密码。
- 其余配置默认
下一步,确认配置信息。
检查配置信息,勾选同意协议,确认开通即可。
4.2 检查CVM云服务器状态
购买CVM云服务器后,会自动跳转到云服务器的实例列表,我们可以看到云服务器状态正在运行中。
五、检查云服务器环境
5.1 本地远程登录云服务器
复制云服务器的公网IP地址,远程连接时使用。
5.2 远程ssh连接云服务器
本地使用Xshell远程连接腾讯CVM云服务器
5.3 查看操作系统版本
执行以下命令,修改云服务器主机名,重新SSH连接后,主机名生效。
hostnamectl set-hostname k8s
查看操作系统版本,当前操作系统版本为CentOS Linux release 7.6.1810。
[root@VM-0-15-centos ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
查看内核版本,当前内核版本为3.10.0-1160.99.1.el7.x86_64。
[root@k8s ~]# uname -r
3.10.0-1160.99.1.el7.x86_64
5.4 云服务器相关基础配置
执行以下命令,检查当前yum仓库状态。
[root@k8s ~]# yum repolist enabled
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
repo id repo name status
epel/7/x86_64 EPEL for redhat/centos 7 - x86_64 13,786
extras/7/x86_64 Qcloud centos extras - x86_64 518
os/7/x86_64 Qcloud centos os - x86_64 10,072
updates/7/x86_64 Qcloud centos updates - x86_64 5,568
repolist: 29,944
执行以下命令,安装tree、git、wget、net-tools等基础软件,可根据自身需要安装其他软件。
yum install tree wget net-tools git -y
六、安装Docker环境
6.1 安装Docker
执行以下部署脚本,一键安装Docker。
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh --mirror Aliyun
6.2 Docker相关配置
执行以下命令,配置Docker的镜像加速。
echo '{ "registry-mirrors": ["https://docker.mirrors.sjtug.sjtu.edu.cn"] }' > /etc/docker/daemon.json
systemctl daemon-reload && systemctl restart docker
开启内核IP转发功能
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
查看是否成功:sysctl net.ipv4.ip_forward,如果返回为“net.ipv4.ip_forward = 1”则表示成功 sysctl。
sysctl -p
sysctl net.ipv4.ip_forward
检查当前Docker状态,确保Docker服务正常运行。
[root@k8s ~]# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
Active: active (running) since Wed 2024-01-24 21:21:42 CST; 49s ago
Docs: https://docs.docker.com
Main PID: 12324 (dockerd)
Tasks: 10
Memory: 31.2M
CGroup: /system.slice/docker.service
└─12324 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
七、安装minikube
7.1 安装kubectl工具
创建部署目录/data/minikube,本次实践下载的文件都存放在此目录下。
mkdir -p /data/minikube && cd /data/minikube
下载kubectl二进制包
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
复制kubectl的二进制文件
mv kubectl /usr/bin/kubectl && chmod +x /usr/bin/kubectl
检查kubectl的版本,本次安装的kubectl版本为v1.29.1。
[root@k8s minikube]# kubectl version
Client Version: v1.29.1
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
The connection to the server localhost:8080 was refused - did you specify the right host or port?
7.2 下载minikube软件包
下载minikube软件包
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
7.3 安装minikube
执行以下命令,开始安装minikube工具。
sudo install minikube-linux-amd64 /usr/local/bin/minikube
7.4 查看minikube版本
检查minikube版本,当前版本为v1.30.1版本。
[root@k8s minikube]# minikube version
minikube version: v1.32.0
commit: 8220a6eb95f0a4d75f7f2d7b14cef975f050512d
八、部署k8s集群
8.1 安装conntrack-tools工具
安装conntrack-tools工具.,此工具必须提前安装,否则在启动k8s集群时会直接报错。
yum -y install conntrack-tools
8.2 安装cri-dockerd
下载cri-dockerd软件,下载地址:https://github.com/Mirantis/cri-dockerd
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.1/cri-dockerd-0.3.1.amd64.tgz
[root@k8s minikube]# ls
cri-dockerd-0.3.1.amd64.tgz minikube-linux-amd64
解压复制cri-dockerd二进制文件
[root@k8s minikube]# tar -xzf cri-dockerd-0.3.1.amd64.tgz
[root@k8s minikube]# cp cri-dockerd/cri-dockerd /usr/bin/
查看cri-dockerd版本,本次使用的cri-dockerd版本为0.3.1。
[root@k8s minikube]# cri-dockerd --version
cri-dockerd 0.3.1 (7e528b98)
根据以下配置,编辑cri-dockerd的socket文件。
vim /etc/systemd/system/cri-docker.socket
[Unit]
Description=CRI Docker Socket for the API
PartOf=cri-docker.service
[Socket]
ListenStream=%t/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker
[Install]
WantedBy=sockets.target
根据以下配置,编辑cri-docker的服务启动文件。
vim /etc/systemd/system/cri-docker.service
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target
Requires=cri-docker.socket
[Service]
Type=notify
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --network-plugin= --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.6 --network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
# Note that StartLimit* options were moved from "Service" to "Unit" in systemd 229.
# Both the old, and new location are accepted by systemd 229 and up, so using the old location
# to make them work for either version of systemd.
StartLimitBurst=3
# Note that StartLimitInterval was renamed to StartLimitIntervalSec in systemd 230.
# Both the old, and new name are accepted by systemd 230 and up, so using the old name to make
# this option work for either version of systemd.
StartLimitInterval=60s
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Comment TasksMax if your systemd version does not support it.
# Only systemd 226 and above support this option.
TasksMax=infinity
Delegate=yes
KillMode=process
[Install]
WantedBy=multi-user.target
启动cri-dockerd服务,并设置开机启动。
systemctl enable cri-docker.service --now
查看cri-dockerd服务状态,确保cri-docker服务正常启动。
[root@k8s minikube]# systemctl status cri-docker.service
● cri-docker.service - CRI Interface for Docker Application Container Engine
Loaded: loaded (/etc/systemd/system/cri-docker.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2024-01-24 22:05:16 CST; 28s ago
Docs: https://docs.mirantis.com
Main PID: 23347 (cri-dockerd)
Tasks: 9
Memory: 14.1M
CGroup: /system.slice/cri-docker.service
8.3 安装crictl
下载crictl软件,下载地址:https://github.com/kubernetes-sigs/cri-tools/releases/tag/v1.27.0。
wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.27.0/crictl-v1.27.0-linux-amd64.tar.gz
[root@k8s minikube]# ls
crictl-v1.27.0-linux-amd64.tar.gz cri-dockerd cri-dockerd-0.3.1.amd64.tgz minikube-linux-amd64
解压crictl软件包
tar -xzf crictl-v1.27.0-linux-amd64.tar.gz -C /usr/bin/
检查crictl版本,本次使用的crictl版本为v1.27.0。
[root@k8s minikube]# crictl -version
crictl version v1.27.0
8.4 安装cni-plugins
安装cni-plugins,下载地址:https://github.com/containernetworking/plugins/releases。
wget https://github.com/containernetworking/plugins/releases/download/v1.2.0/cni-plugins-linux-amd64-v1.2.0.tgz
[root@k8s minikube]# ls
cni-plugins-linux-amd64-v1.2.0.tgz cri-dockerd minikube-linux-amd64
crictl-v1.27.0-linux-amd64.tar.gz cri-dockerd-0.3.1.amd64.tgz
执行以下命令,创建/opt/cni/bin/目录。
mkdir -p /opt/cni/bin/
解压 cni-plugins到/opt/cni/bin/
tar -xzf cni-plugins-linux-amd64-v1.2.0.tgz -C /opt/cni/bin/
8.5 部署k8s集群
执行以下命令,快速部署一个单机的轻量级k8s集群。
minikube start --driver=none --kubernetes-version=v1.26.3
国内环境下,使用国内镜像源拉取,速度会有点慢。
minikube start --image-mirror-country=cn --driver=none --kubernetes-version=v1.26.3
- --driver=none Minikube使用无驱动程序的方式来创建Kubernetes本地环境
- --registry-mirror=***为了拉取Docker Hub镜像,需要为 Docker daemon 配置镜像加速,参考阿里云镜像服务
- --kubernetes-version=***: minikube 虚拟机将使用的 kubernetes 版本
8.6 检查minikube状态
检查minikube状态,确保k8s各组件正常运行。
[root@k8s minikube]# minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
8.7 新增k8s集群节点
执行以下命令,用于在minikube集群中添加一个新的节点。这个命令可以用于扩展集群,增加节点的数量,从而提高集群的可靠性和容量。
minikube node add
8.8 清空k8s环境
可以通过以下命令,删除所有本地k8s集群和配置文件,以防配置错误,清空环境,重新部署k8s集群。
minikube stop/delete # 停止、删除本地集群
minikube delete --all #删除所有本地集群和配置文件
九、检查k8s环境
9.1 检查本地容器
执行以下命令,可以查看本地启动的相关k8s组件容器。
docker container ls
9.2 检查k8s集群节点状态
执行以下命令,可以看到k8s所有节点状态
[root@k8s minikube]# kubectl get nodes -owide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
k8s Ready control-plane 5m52s v1.26.3 172.28.0.15 <none> CentOS Linux 7 (Core) 3.10.0-1160.99.1.el7.x86_64 docker://25.0.1
9.3 检查k8s集群系统pod状态
检查k8s集群系统pod状态
[root@k8s minikube]# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-567c556887-lv6fl 1/1 Running 0 7m50s
etcd-k8s 1/1 Running 0 8m3s
kube-apiserver-k8s 1/1 Running 0 8m3s
kube-controller-manager-k8s 1/1 Running 0 8m4s
kube-proxy-5cxbh 1/1 Running 0 7m50s
kube-scheduler-k8s 1/1 Running 0 8m3s
storage-provisioner 1/1 Running 0 8m2s
十、部署Nginx测试应用
10.1 编辑部署文件
编辑一个测试web.yaml文件
vim web.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-testweb
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:alpine
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
labels:
app: nginx
name: svs-web
spec:
# clusterIP: None
ports:
- name: web-port
port: 80
protocol: TCP
targetPort: 80
nodePort: 30060
selector:
app: nginx
type: NodePort
10.2 部署测试应用
部署Nginx测试应用
[root@k8s minikube]# kubectl apply -f web.yaml
deployment.apps/my-testweb created
service/svs-web created
10.3 检查Nginx的pod和service状态
查看Nginx服务的pod及service状态
- 查看pod状态
[root@k8s minikube]# kubectl get pods
NAME READY STATUS RESTARTS AGE
my-testweb-774f96d4d9-w8x66 1/1 Running 0 61s
- 查看service资源对象
[root@k8s minikube]# kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 14m
svs-web NodePort 10.97.128.248 <none> 80:30060/TCP 90s
10.4 本地访问Nginx应用
在腾讯云安全组在入方向上放行30060端口
在本地浏览器访问:http://云服务器公网IP地址:30060
十一、部署KubePi管理面板
11.1 安装KubePi管理面板
执行以下命令,使用docker-cli快速创建KubePi容器。
docker run --privileged -d -v /root/.minikube:/root/.minikube --name kubepi --restart=unless-stopped -p 8098:80 kubeoperator/kubepi-server
使用以下docker-compose.yaml部署文件,创建KubePi容器。
version: '3'
services:
kubepi:
image: kubeoperator/kubepi-server
privileged: true
volumes:
- /root/.minikube:/root/.minikube
restart: unless-stopped
ports:
- 8098:80
docker compose up -d #创建KubePi容器
11.2 检查kubepi容器日志
- 检查kubepi容器状态,确保kubepi容器正常启动。
[root@k8s minikube]# docker compose ps
NAME COMMAND SERVICE STATUS PORTS
minikube-kubepi-1 "tini -g -- kubepi-s…" kubepi running 0.0.0.0:8098->80/tcp, :::8098->80/tcp
- 检查kubepi容器日志,确保KubePi服务正常运行。
[root@k8s minikube]# docker logs kubepi
\config file not found in , skip
time="2024-01-25T19:22:47+08:00" level=info msg="current db version: 0"
time="2024-01-25T19:22:47+08:00" level=info msg="executing db migration: [1] Create default user and cluster"
time="2024-01-25T19:22:47+08:00" level=info msg="executing db migration: [2] Add role repo manager"
time="2024-01-25T19:22:47+08:00" level=info msg="update db to version: 2"
Now listening on: http://0.0.0.0
11.3 访问kubepi面板
本地浏览器访问:http://公网IP地址:8098,将IP替换为自己云服务器的IP地址。需要在云服务器的安全组上放行8098端口,登录密码默认为admin/kubepi。
11.4 添加k8s集群
下载本地kubeconfig文件,在k8s集群中,kubeconfig文件一般默认在 $HOME/.kube目录下。
sudo mv /root/.kube /root/.minikube $HOME
sudo chown -R $USER $HOME/.kube $HOME/.minikube
[root@k8s minikube]# ls /root/.kube/
cache config
上传kubeconfig文件到kubepi面板。
11.5 查看k8s集群状态
添加成功后,可以看到k8s集群状态正常。
查看添加的k8s集群详细信息
十二、总结
腾讯云服务器CVM的强大性能大大提高了学习与实践的效率,在本次实践中,遇到了一些问题,但都得到了逐一解决。其中最重要的问题是minikube启动集群时拉取镜像速度过慢的问题。尽管使用了国内的镜像源,但仍然非常缓慢。除了使用国外云主机部署的方式,后来发现了更快的启动方法,即提前拉取启动k8s集群所需的镜像,或者导入别人准备好的镜像包到本地进行启动,这种方式省去了镜像拉取缓慢的问题。之后,可以在本次实践的基础上,添加更多的k8s工作节点,以提高集群的可靠性和容量,并发现更多k8s的可玩性。
更多推荐
所有评论(0)