Service类型

在 Kubernetes 中,Service 是一种抽象的概念,用于将一组 Pod 组织在一起,并为它们提供统一的访问入口。Service 可以通过一组稳定的 IP 地址和端口号,为其他容器或外部用户提供对这些 Pod 的访问。

为什么需要服务?

pod的存在是短暂的,当pod因为节点故障或者人为原因下线的时候,ReplicationController可以上线一个新的pod。但是新的pod和原来的pod的IP是不相同的——为了解决不断变化的pod IP地址的问题,以及在一个固定的IP和端口对外暴露多个pod。

当一个服务被创建时,他会得到一个静态的IP,在服务的生命周期中这个IP不会发生变化。客户端应该通过这个固定IP地址连接到服务,而不是直接连接到pod。

服务的类型

Kubernetes 中的 Service 有以下四种类型:

1、ClusterIP

这是默认的 Service 类型,用于将 Service 暴露在集群内部。它为每个 Service 分配一个虚拟 IP 地址,可以通过该地址访问 Service 中的 Pod。ClusterIP 只能从集群内部访问,不能从集群外部访问。

2、NodePort

这种类型的 Service 将 Service 暴露到集群外部,通过将每个节点上的端口映射到 Service 上,可以让外部用户通过任意节点的 IP 地址和映射端口访问 Service 中的 Pod。NodePort 通常用于测试和开发环境,不太适合生产环境。

3、LoadBalancer

这种类型的 Service 可以将 Service 暴露到集群外部,并使用云提供商的负载均衡器将流量路由到 Service 中的 Pod。LoadBalancer 只能在云提供商支持的环境中使用,并且需要正确配置云提供商的负载均衡器才能正常工作。

4、ExternalName

这种类型的 Service 可以将 Service 暴露到集群外部,但它并不会创建任何代理或负载均衡器,而只是将 Service 映射到一个 DNS 名称。这可以让您在 Kubernetes 中使用外部服务,或者在不同的命名空间中重用服务。

这些 Service 类型之间的主要差异在于它们暴露 Service 的方式、访问方式和使用场景不同。在选择 Service 类型时,您应该考虑您的应用程序的访问需求,以及您正在使用的 Kubernetes 部署环境的限制和要求。

Replication Controller与Deployment

Replication Controller

中文翻译:复制控制器

Replication Controller为Kubernetes的一个核心内容,应用托管到Kubernetes之后,需要保证应用能够持续的运行,Replication Controller就是这个保证的key,主要的功能如下:

确保pod数量:它会确保Kubernetes中有指定数量的Pod在运行。如果少于指定数量的pod,Replication Controller会创建新的,反之则会删除掉多余的以保证Pod数量不变。

确保pod健康:当pod不健康,运行出错或者无法提供服务时,Replication Controller也会杀死不健康的pod,重新创建新的。

弹性伸缩 :在业务高峰或者低峰期的时候,可以通过Replication Controller动态的调整pod的数量来提高资源的利用率。同时,配置相应的监控功能(Hroizontal Pod Autoscaler),会定时自动从监控平台获取Replication Controller关联pod的整体资源使用情况,做到自动伸缩。

滚动升级:滚动升级为一种平滑的升级方式,通过逐步替换的策略,保证整体系统的稳定,在初始化升级的时候就可以及时发现和解决问题,避免问题不断扩大。

Deployment

Deployment同样为Kubernetes的一个核心内容,主要职责同样是为了保证pod的数量和健康,90%的功能与Replication Controller完全一样,可以看做新一代的Replication Controller。但是,它又具备了Replication Controller之外的新特性:

Replication Controller全部功能:Deployment继承了上面描述的Replication Controller全部功能。

事件和状态查看:可以查看Deployment的升级详细进度和状态。

回滚:当升级pod镜像或者相关参数的时候发现问题,可以使用回滚操作回滚到上一个稳定的版本或者指定的版本。

版本记录: 每一次对Deployment的操作,都能保存下来,给予后续可能的回滚使用。

暂停和启动:对于每一次升级,都能够随时暂停和启动。

多种升级方案:Recreate:删除所有已存在的pod,重新创建新的; RollingUpdate:滚动升级,逐步替换的策略,同时滚动升级时,支持更多的附加参数,例如设置最大不可用pod数量,最小升级间隔时间等等。 ———————————————— 版权声明:本文为CSDN博主「小魏的博客」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/w2009211777/article/details/124014770

Linux指令

sudo su  //以root身份登录
lsof -i  //打印进程和监听端口

【实践】在腾讯云轻量级服务器上搭建网站

实践内容

在腾讯云上,有首月免费的轻量级服务器可以租借。

本次实训的内容是,租借一台服务器,部署《kubernetes in action》当中的网站例子。至少包含 deployment(部署) nodeport(服务的类型) prometheus grafna 这些功能。

解释:

phometheus:当前一套非常流行的开源监控和报警系统

Grafana 是一个用于可视化大型测量数据的开源系统,它的功能非常强大,界面也非常漂亮,

Prometheus + Grafana

虽然 Prometheus 提供的 Web UI 也可以很好的查看不同指标的视图,但是这个功能非常简单,只适合用来调试。要实现一个强大的监控系统,还需要一个能定制展示不同指标的面板,能支持不同类型的展现方式(曲线图、饼状图、热点图、TopN 等),这就是仪表盘(Dashboard)功能。

因此 Prometheus 开发了一套仪表盘系统 PromDash,不过很快这套系统就被废弃了,官方开始推荐使用 Grafana 来对 Prometheus 的指标数据进行可视化,这不仅是因为 Grafana 的功能非常强大,而且它和 Prometheus 可以完美的无缝融合。 ———————————————— 版权声明:本文为CSDN博主「40岁资深老架构师尼恩」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/crazymakercircle/article/details/127206293

实践步骤

要完成这个任务,您需要执行以下步骤:

  1. 购买一台虚拟服务器,可以使用云计算服务商如阿里云、腾讯云、AWS等提供的虚拟机实例,也可以使用自己的物理服务器。
  2. 在服务器上安装 Kubernetes,您可以选择手动安装或使用 Kubernetes 安装程序(如 kubeadm)进行安装。安装过程可以参考《Kubernetes in Action》书籍中的相关章节。
  3. 部署网站示例,可以使用书中提供的示例或者使用自己编写的应用程序,将其打包成 Docker 镜像并上传至 Docker 镜像仓库
  4. 使用 Kubernetes 的 Deployment 功能创建应用程序的部署,确保应用程序能够正常运行。
  5. 通过 Kubernetes 的 NodePort 功能暴露应用程序的服务,以便能够从外部访问应用程序。
  6. 安装 Prometheus 和 Grafana,用于监控应用程序的性能和运行状况。
  7. 应用程序和监控系统的指标数据通过 Kubernetes 的 Service 功能进行关联,以便监控系统能够收集和分析应用程序的指标数据。
  8. 在 Grafana 中创建仪表盘,用于显示应用程序的监控数据。

完成以上步骤后,您就可以在服务器上部署《Kubernetes in Action》书籍中的网站示例,并使用 Prometheus 和 Grafana 监控应用程序的性能和运行状况。

实践提示

在腾讯云上安装K8S

在腾讯云上安装 Kubernetes,可以按照以下步骤进行:

  1. 登录腾讯云控制台,选择容器服务(TKE)。
  2. 创建 Kubernetes 集群:在容器服务(TKE)控制台上,选择创建集群,按照页面提示填写集群名称、节点数量、实例规格等信息,选择集群网络和安全组等配置。
  3. 安装和配置 kubectl:在 Kubernetes 集群创建完成后,进入集群管理页面,下载并安装 kubectl 工具,配置集群连接信息。
  4. 部署 Kubernetes 组件:在集群管理页面上,选择组件管理,按照页面提示部署 Kubernetes 组件,如 kube-apiserver、kube-controller-manager、kube-scheduler、etcd 等。
  5. 部署网络插件:在集群管理页面上,选择网络插件,选择并部署一个合适的网络插件,如 Flannel、Calico、Weave Net 等。
  6. 部署存储插件:如果需要在 Kubernetes 集群中使用持久化存储,可以选择并部署一个存储插件,如 Ceph、GlusterFS 等。
  7. 部署应用程序:使用 kubectl 工具,在 Kubernetes 集群上部署和管理自己的应用程序,如创建 Pod、Deployment、Service 等 Kubernetes 对象。

总之,在腾讯云上安装 Kubernetes,需要根据具体的需求,选择不同的配置和插件,按照腾讯云容器服务(TKE)提供的文档和指南进行操作,最终构建出一个稳定、可靠的 Kubernetes 集群。

搭建一个网页并制作成Docker镜像

  1. 选择一个网页框架:您可以选择一个合适的网页框架,比如 Flask、Django、Vue.js、React 等。这些框架都有各自的优缺点和使用场景,您可以根据自己的需要进行选择。
  2. 编写网页代码:根据您选择的框架,编写网页代码,实现您想要的功能。您可以在本地开发环境中进行调试和测试,确保代码能够正常运行。
  3. 配置 Dockerfile:在您的代码目录下创建一个名为 Dockerfile 的文件,该文件包含构建 Docker 镜像的指令。您需要根据您的应用程序和所选框架进行相应的配置,包括设置基础镜像、安装所需的依赖项、将代码复制到容器中等。
  4. 构建 Docker 镜像:使用 Docker 命令构建 Docker 镜像,将您的网页代码打包成 Docker 镜像。例如,使用以下命令构建一个名为 my-web 的 Docker 镜像:
docker build -t my-web .
  1. 测试 Docker 镜像:使用 Docker 命令运行您的 Docker 镜像,测试您的网页能否正常工作。例如,使用以下命令启动一个名为 my-web 的 Docker 容器:
docker run -p 8080:80 my-web

​ 其中,-p 8080:80 表示将容器内部的 80 端口映射到主机的 8080 端口。

  1. 上传 Docker 镜像:将您的 Docker 镜像上传到 Docker Hub 或其他 Docker 镜像仓库中,以便其他人可以访问和使用您的镜像。

以上是一个简单的搭建网页并制作 Docker 镜像的步骤。具体的步骤可能会因为您选择的框架和工具而略有不同,您需要根据实际情况进行调整和优化。

实践报告

1.实践步骤

1.1 完成网页代码的编写

网页文件 版本v1 index.html:

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>随机生成字符串</title>
</head>
<body>
	<h1>随机生成字符串</h1>
	<p id="result"></p>
	<button onclick="generate()">生成</button>
	
	<script>
		function generate() {
			// 定义生成字符串的所有字符
			var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
			// 定义生成字符串的长度
			var length = 10;
			var result = "";
			// 循环生成字符串
			for (var i = 0; i < length; i++) {
				result += chars.charAt(Math.floor(Math.random() * chars.length));
			}
			// 将生成的字符串显示在页面上
			document.getElementById("result").innerHTML = result;
		}
	</script>
</body>
</html>

网页文件 版本v2 index-with-error.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>访问出错</title>
</head>
<body>
    <h1 style="text-align: center;">Error!</h1>
</body>
</html>

网页版本v1是正常的网页,而版本v2用来模拟版本更新中出现错误的版本,利用deployment进行历史版本的回滚。

1.2 完成镜像的打包

分别编写两个网站的Dockerfile,将他们打包成不同的镜像。

版本v1Dockerfile:

# 指定基础镜像
FROM nginx

# 将工作目录切换到 /usr/share/nginx/html
WORKDIR /usr/share/nginx/html

# 将当前目录下的 index.html 和 main.js 文件复制到镜像中的 /usr/share/nginx/html 目录下
COPY index.html .

# 暴露容器的 80 端口
EXPOSE 80

# 运行 nginx 服务器
CMD ["nginx", "-g", "daemon off;"]

版本v2 Dockerfile:

# 指定基础镜像
FROM nginx

# 将工作目录切换到 /usr/share/nginx/html
WORKDIR /usr/share/nginx/html

# 将当前目录下的 index.html 和 main.js 文件复制到镜像中的 /usr/share/nginx/html 目录下
COPY index-with-error.html .

# 暴露容器的 80 端口
EXPOSE 80

# 运行 nginx 服务器
CMD ["nginx", "-g", "daemon off;"]

在启动docker桌面版之后在终端中执行命令:

docker build -t frontend:v1 .
docker build -t frontend:v2 .

1.3 完成上传至腾讯云镜像仓库

完成登陆指令:

docker login ccr.ccs.tencentyun.com --username=100029754889

完成镜像的更名和推送到腾讯云上的镜像仓库:

docker tag 500112082598e896cd70b459fccf2e3c5f39874bf854589626eec751a3933a5b ccr.ccs.tencentyun.com/siriusspace/sirius:v2
docker push ccr.ccs.tencentyun.com/siriusspace/sirius:v2

docker tag f79982b77bfbe0f92a7de6a2fabdc21e818de3370aed1c38a6ab3c73d1dd0b32 ccr.ccs.tencentyun.com/siriusspace/sirius:v3
docker push ccr.ccs.tencentyun.com/siriusspace/sirius:v3

1.4 在腾讯云上面申请一个轻量级应用服务器

在腾讯云上申请一个基于容器镜像的Ubuntu20.04-Docker20系统,用于此次计算思维实训的工作环境。

1.5 服务器环境配置

在腾讯云的OracTerm上登陆,把当前用户设置成超级管理员,并且在上面安装必要的环境,如kubernetes,docker;

也可以使用SSH工具进行远程登陆进行操作,在首次使用SSH远程登陆,需要重置密码;并且当服务器重装系统之后,需要将本地的known_hosts中的文件注释掉,再重新进行登录。

1.5.1 安装docker的步骤:
  1. 更新 apt 包索引:

    sudo apt-get update
    
  2. 安装依赖包,用于让 apt 能够通过 HTTPS 使用 Docker 仓库:

    sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
    
  3. 添加 Docker 的 GPG 密钥:

    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    
  4. 添加 Docker APT 仓库:

    echo \
      "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
      $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    
  5. 更新 apt 包索引:

    sudo apt-get update
    
  6. 安装 Docker:

    sudo apt-get install docker-ce docker-ce-cli containerd.io
    
  7. 验证 Docker 是否安装成功
    sudo docker version
    
1.5.2 安装kubernetes的步骤:
1.安装Kubernetes的工具包:kubeadm、kubelet和kubectl
//阿里云镜像仓库
sudo apt-get update && sudo apt-get install -y apt-transport-https curl
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
2.初始化Kubernetes集群

​ 在安装完成kubeadm和kubelet后,使用kubeadm初始化Kubernetes集群。首先,选择腾讯云的轻量级服务器作为主节点,然后在该节点上运行以下命令:

sudo kubeadm init --image-repository=registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16

​ 运行 kubeadm init初始化主节点Kubeadm部署了所有必要的控制面板组件,包括etcd、API服务器、Scheduler和Controller Manager,此外他还部署了kube-proxy,使得主节点可以使用Kubernetes服务。`

--image-repository选项指定Docker镜像仓库,这里使用阿里云的镜像仓库。--pod-network-cidr选项指定Pod网络的CIDR。

​ 该命令将自动下载并安装必要的组件,并初始化Kubernetes集群。在安装完成后,kubeadm将输出一个join命令,将此命令保存,以便于复制到另一个节点上运行以加入集群。

3.安装网络插件

​ 在Kubernetes集群中,Pod之间需要进行通信。要实现这一点,需要安装一个网络插件。

​ 使用Flannel作为网络插件,用以下命令安装Flannel:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
4.将其他节点加入集群

​ 在工作节点上使用特定的token以及主节点的IP地址端口信息。执行kubeadm join命令,然后节点将自己的信息注册到主节点,可以在主节点上再次执行kubectl get node 命令,检查是否注册完成。

​ 对于要加入集群的节点,需要在其中一台Master节点上运行以下命令获取加入集群所需的token和证书:

luaCopy code
sudo kubeadm token create --print-join-command

​ 将输出的命令复制到要加入集群的节点上运行,例如:

rubyCopy code
sudo kubeadm join <master-node-ip>:<master-node-port> --token <token> --discovery-token-ca-cert-hash <hash>

​ 其中<master-node-ip>是主节点的IP地址,<master-node-port>是主节点的端口,<token>是之前获取的加入集群的token,<hash>是证书的哈希值,也可以从主节点上获取。

​ 运行以上命令后,节点将会自动加入Kubernetes集群。

5.验证集群

​ 安装完成后,使用以下命令验证集群是否正常工作:

csharpCopy code
kubectl get nodes

​ 该命令将输出所有已连接的节点的信息,如果节点显示为Ready状态,则表示节点已成功加入集群。

1.6 编写部署文件

1.6.1 编写deployment.yaml文件

在本地编写sirius-deployment-v1.yaml文件,上传至腾讯云服务器上的文件目录中,在执行kubectl指令,进行相关部署。

sirius-deployment-v1.yaml文件:

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: sirius
  labels:
    app: sirius
spec:
  replicas: 2
  selector:
    matchLabels:
      app: sirius
  template:
    metadata:
      labels:
        app: sirius
    spec:
      containers:
      - name: web-v1
        image: ccr.ccs.tencentyun.com/siriusspace/sirius:v2
        ports:
        - containerPort: 8080

sirius-deployment-v2.yaml文件:

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: sirius
  labels:
    app: sirius
spec:
  replicas: 2
  selector:
    matchLabels:
      app: sirius
  template:
    metadata:
      labels:
        app: sirius
    spec:
      containers:
      - name: web-v2
        image: ccr.ccs.tencentyun.com/siriusspace/sirius:v3
        ports:
        - containerPort: 8080

执行指令:

kubectl create -f sirius-deployment-v1.yaml

可以通过命令:

kubectl get deployments

查看deployment的状态。

1.6.2 通过NodePort暴露服务

编写sirius-svc-nodeport.yaml文件:

apiVersion: v1
kind: Service
metadata:
  name: sirius-nodeport
spec:
  type: NodePort
  selector:
    app: sirius
  ports:
  - port: 80
    targetPort: 8080
    nodePort: 30123

执行指令:

kubectl create -f sirius-svc-nodeport.yaml

可以通过命令:

kubectl get svc

1.7 配置 prometheus 和 grafna 相关功能

1.7.1 安装Helm

Helm 是 Kubernetes 的包管理工具,可以用来部署各种 Kubernetes 应用,包括 Prometheus 和 Grafana。可以在终端中使用以下命令安装 Helm:

curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
1.7.2 安装 Prometheus

可以使用 Helm 来安装 Prometheus。先添加 Prometheus Helm chart 的仓库:

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts

然后更新本地的 Helm chart 缓存:

helm repo update

使用 Helm 安装 Prometheus 了:

helm install prometheus prometheus-community/kube-prometheus-stack
1.7.3 安装 Grafana

可以使用 Helm 来安装 Grafana。先添加 Grafana Helm chart 的仓库:

helm repo add grafana https://grafana.github.io/helm-charts

然后更新本地的 Helm chart 缓存:

helm repo update

接下来就可以使用 Helm 安装 Grafana 了:

helm install grafana grafana/grafana
1.7.4 配置 Grafana

安装完成后,可以通过以下命令来获取 Grafana 的 admin 密码:

kubectl get secret --namespace default grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo

将输出的密码复制下来,并使用浏览器访问 Grafana 的 Web 界面。默认的服务地址是 http://<Node-IP>:3000,其中 <Node-IP> 是 Kubernetes 节点的 IP 地址。在第一次登录时需要输入管理员用户名和密码,可以使用默认的 admin 用户名和上面获取到的密码登录。

接下来,需要配置 Grafana 的数据源,用于连接到 Prometheus 数据库。可以通过以下步骤来配置:

  1. 登录到 Grafana 的 Web 界面,点击左侧的“Configuration”按钮,然后选择“Data Sources”。
  2. 点击“Add data source”按钮,选择“Prometheus”作为数据源类型。
  3. 在“HTTP”一栏中,输入 Prometheus 的服务地址,即 http://prometheus-server
  4. 点击“Save & Test”按钮,测试连接是否成功。

配置完成后,就可以在 Grafana 中创建 Dashboard 并展示 Prometheus 数据了。

2.实践中遇到的困难

2.1 利用Dockerfile构建镜像出现错误

在刚开始部署的网站版本中,将网站分为了前端和后端,后端中还包含了一个MySQL数据库。网站主要实现的功能是,当用户在前端点击网页上的按钮之后,就会生成随机字符串。随机字符串是通过后端的服务产生的,并将随机产生的字符串。存储到后端的数据库中。但是它们的依赖项有很多,所以当时在用dockerfile构建镜像的时候,由于一些依赖项并没有包含进去,会导致构建镜像时和运行镜像时出现错误。

这个时候需要将所有的依赖项通过命令行打印出来,再复制到一个文件中,将该文件包含在dockerfile中才能正确运行。有的时候,在构建镜像的时候,因为网络的原因,即使没有对需要打包的文件进行调整,也会出现因为网络问题而导致的镜像构建失败的问题。然后有时候会。进行多次操作,直至镜像构建成功。

2.2 镜像拉取请求超时

Error response from daemon: Get "https://k8s.gcr.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
[root@VM-4-3-centos lighthouse]# sudo docker pull k8s.gcr.io/coredns/coredns:v1.8.4
Error response from daemon: Get "https://k8s.gcr.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

有时候因为网络连接和服务器无法访问谷歌镜像仓库的原因,会导致镜像拉取出现请求超时。可以使用国内的阿里云和网易云的镜像仓库进行替换。

2.3 在Ubuntu和CentOS上的操作命令不同

有一些命令比如安装,在Ubuntu和CentOS上的不同,在Ubuntu上是apt-get指令,在CentOS上是yum的指令。需要对指令进行熟悉操作。Ubuntu和CentOS是两种常见的Linux操作系统,它们的命令行操作有很多不同之处。其中一个主要的区别是软件包管理器的不同。在Ubuntu中,软件包管理器是APT(Advanced Package Tool),而在CentOS中,软件包管理器是Yum(Yellowdog Updater, Modified)。

因此,安装软件包的命令在Ubuntu和CentOS上是不同的。在Ubuntu上,使用apt-get命令来安装软件包,例如:

sudo apt-get install <package-name>

而在CentOS上,则使用yum命令来安装软件包,例如:

sudo yum install <package-name>

2.4 kubectl的安装配置

在使用"kubectl cluster-info"查看集群相关信息的时候,会出现错误:

The connection to the server 10.0.4.3:6443 was refused - did you specify the right host or port?

这个错误通常表示kubectl无法与Kubernetes API Server建立连接,这可能是由于以下原因之一造成的:

  1. Kubernetes API Server未运行或不可访问。可以尝试使用kubectl get pods –all-namespaces命令来检查集群中的所有Pod是否正在运行。
  2. Kubernetes API Server绑定到了错误的IP地址或端口。确保正在使用正确的IP地址和端口。
  3. 防火墙或网络策略阻止了连接。请确保网络设置允许与Kubernetes API Server建立连接。
  4. Kubectl配置文件可能配置不正确。请检查您的Kubectl配置文件,确保您的API Server端口、IP地址和证书等信息正确。

2.5 使用SSH远程登陆错误

ssh ubuntu@101.35.249.58
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ED25519 key sent by the remote host is
SHA256:8T8WjRenPMEsyVejntM6DsJ1wWAjiRp1TSTHRasRRhY.
Please contact your system administrator.
Add correct host key in /home/sirius/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /home/sirius/.ssh/known_hosts:2
  remove with:
  ssh-keygen -f "/home/sirius/.ssh/known_hosts" -R "101.35.249.58"
Host key for 101.35.249.58 has changed and you have requested strict checking.
Host key verification failed.

这个错误提示表明SSH客户端检测到远程主机的公钥与之前存储在本地known_hosts文件中的公钥不匹配。 这可能是由于中间人攻击或远程主机重新安装操作系统等原因导致的。所以,当服务器重装系统之后,需要将本地的known_hosts中的文件注释掉,再重新进行登录。