手把手kubernetes本地化部署(含疑难杂症排查解析)

news2024/11/27 2:37:49

文章目录

      • 一、什么是Kubernetes?
      • 二、Kubernetes的基本概念
          • Pod
          • Deployment
          • Service
          • Namespace
          • ConfigMap
          • Secret
      • 三、Kuberntes单机本地部署
        • 3.1、安装minikube命令行工具
        • 3.2、安装docker
        • 3.3、启动minikube
        • 3.4、使用Dashboard
        • 3.5、异常问题解决
          • 3.5.1、提示Docker失败
          • 3.5.2、docker DNS配置
          • 3.5.3、metrics-server启动失败
        • 3.6、删除minikube
      • 四、kubernetes的基础用法
        • 4.1、创建和查询Deployment
        • 4.2、创建和查询Pod
        • 4.3、公开服务
        • 4.4、访问应用程序:
        • 4.5、手动缩放Pod
        • 4.6、删除资源

公众号: MCNU云原生,文章首发地,欢迎微信搜索关注,更多干货,第一时间掌握!

Kubernetes是一个容器编排系统,用于自动化应用程序部署、扩展和管理。本指南将介绍Kubernetes的基础知识,包括基本概念、安装部署和基础用法。

一、什么是Kubernetes?

Kubernetes是Google开发的开源项目,是一个容器编排系统,可以自动化部署、扩展和管理容器化的应用程序。Kubernetes可以跨多个主机管理容器,并提供自动化负载均衡、弹性伸缩、自我修复和滚动更新等功能。

Kubernetes的基本架构由Master和Node组成。Master是集群控制中心,负责管理集群状态、控制应用程序部署和监控应用程序状态。Node是集群的工作节点,运行应用程序容器并将它们与Master通信。

二、Kubernetes的基本概念

在使用Kubernetes之前,需要了解一些基本概念。以下是一些Kubernetes的核心概念:

Pod

Pod是Kubernetes的最小部署单元,通常包含一个或多个容器。Pod中的容器共享网络和存储,并在同一个主机上运行。

Deployment

Deployment是一种Kubernetes资源对象,它用于管理应用程序的部署和更新,通过声明式配置文件描述应用程序的期望状态,并确保系统中运行的实例与所声明的状态相匹配。它可以自动创建、更新、扩展和删除Pod,而无需手动干预。Deployment还提供了滚动升级和回滚的机制,可以在不影响用户访问的情况下更新应用程序。

Deployment使用ReplicaSet来管理Pod的复制。通过指定ReplicaSet的副本数,Deployment可以确保系统中始终有指定数量的Pod在运行。如果有任何Pod失败或终止,Deployment将自动创建新的Pod来代替它们,以确保系统的稳定性。

Service

Kubernetes中的Service是一种抽象,它定义了一个逻辑服务,它为应用程序提供了一个固定的IP地址和端口号,并在Kubernetes集群内部或外部的网络中提供了一致的方式来访问这个服务。 Service可以将多个Pod的IP地址和端口号作为一个服务提供给其他应用程序使用,这样即使Pod的IP地址和端口号发生变化,Service的IP地址和端口号也会保持不变,保证了服务的稳定性和可靠性。

在Kubernetes中,Service与Pods一起使用,可以通过标签来选择哪些Pods属于同一个Service。Service可以有不同的类型,包括ClusterIP、NodePort和LoadBalancer。其中,ClusterIP是默认类型,它将Service暴露在集群内部的虚拟IP地址上,只能从集群内部访问。NodePort类型将Service暴露在每个节点的IP地址和一个静态端口上,可以从集群外部访问。LoadBalancer类型使用云提供商的负载均衡器服务,将Service暴露在一个外部IP地址上,可以从公网访问。

Namespace

Kubernetes中的Namespace是一种用于将资源划分为不同逻辑组的机制。一个Kubernetes集群可以包含多个Namespace,每个Namespace中包含了一组相关的Kubernetes对象,例如Pod、Service、Replication Controller等等。

Namespace可以帮助用户在同一个集群内部将不同的资源进行逻辑隔离,从而避免资源命名冲突和混淆。在同一个Namespace中,每个资源的名称必须是唯一的。而在不同的Namespace中,同一个资源可以使用相同的名称。

Kubernetes内置了一些默认的Namespace,包括default、kube-system和kube-public等等。其中,default是默认的Namespace,kube-system用于存储Kubernetes系统组件的资源,kube-public则是用于存储一些公共资源的。

用户还可以需要创建自己的Namespace,可以通过kubectl命令创建,例如:

kubectl create namespace my-namespace

可以使用以下命令列出当前集群中的所有Namespace:

kubectl get namespaces

可以使用以下命令在指定的Namespace中运行命令:

kubectl run my-pod --image=my-image --namespace=my-namespace

kubectl是kuberntes提供的命令行工具,后文会进行说明,这里只需要了解即可。

ConfigMap

Kubernetes中的ConfigMap是一种用于存储应用程序配置数据的对象,它可以将配置数据与应用程序代码分离,从而提高了应用程序的可移植性和可维护性。ConfigMap可以存储任何形式的配置数据,例如环境变量、命令行参数、配置文件等等。

ConfigMap以键值对的形式存储配置数据,用户可以通过kubectl命令或Kubernetes API创建、更新和删除ConfigMap。可以使用以下命令创建一个ConfigMap:

kubectl create configmap my-config --from-literal=my-key=my-value

上述命令创建了一个名为my-config的ConfigMap,并向其添加了一个键值对my-key=my-value

应用程序可以通过挂载ConfigMap来使用其中的配置数据。例如,可以将ConfigMap中的某个键值对映射到一个环境变量中,或者将ConfigMap中的某个文件挂载到一个容器的文件系统中。

ConfigMap可以使用多种方式与应用程序进行关联,例如通过环境变量、命令行参数、卷等方式。例如,可以使用以下命令将ConfigMap中的某个键值对映射到一个环境变量中:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: my-image
    env:
    - name: MY_CONFIG_KEY
      valueFrom:
        configMapKeyRef:
          name: my-config
          key: my-key

上述配置文件创建了一个名为my-pod的Pod,并将ConfigMap中的my-key键值对映射到一个名为MY_CONFIG_KEY的环境变量中。

Secret

Kubernetes中的Secret是一种用于存储敏感信息的对象,例如密码、证书和密钥等。与ConfigMap类似,Secret也以键值对的形式存储数据,并且可以通过kubectl命令或Kubernetes API创建、更新和删除。

Secret中存储的敏感信息会以base64编码的形式保存,因此需要在使用时进行解码。与ConfigMap类似,Secret也可以通过多种方式与应用程序进行关联,例如通过环境变量、命令行参数、卷等方式。

可以使用以下命令创建一个Secret:

kubectl create secret generic my-secret --from-literal=my-username=admin --from-literal=my-password=secret

上述命令创建了一个名为my-secret的Secret,并向其添加了两个键值对my-username=admin和my-password=secret。

应用程序可以通过挂载Secret来使用其中的敏感信息。例如,可以将Secret中的某个键值对映射到一个环境变量中,或者将Secret中的某个文件挂载到一个容器的文件系统中。

Secret的使用与ConfigMap类似,例如可以使用以下命令将Secret中的某个键值对映射到一个环境变量中:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: my-image
    env:
    - name: MY_USERNAME
      valueFrom:
        secretKeyRef:
          name: my-secret
          key: my-username
    - name: MY_PASSWORD
      valueFrom:
        secretKeyRef:
          name: my-secret
          key: my-password

上述配置文件创建了一个名为my-pod的Pod,并将Secret中的my-usernamemy-password键值对分别映射到名为MY_USERNAMEMY_PASSWORD的环境变量中。

三、Kuberntes单机本地部署

Kubernetes有多种安装方式:minikube、kubeadm和二进制包。

  1. minikube:是一种在本地环境中部署Kubernetes的工具,它可以在单个虚拟机中运行一个Kubernetes集群,一般用于开发、测试环境搭建。
  2. kubeadm:是一种在物理机或虚拟机中快速部署Kubernetes集群的工具,已被证明可以应用于生成环境的集群搭建。
  3. 二进制包:手工安装,流程复杂,容易出错,不建议。

这里以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,建议删除旧的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

使用docker version可以查看docker的版本。

[docker@node3 ~]$ docker version
Client: Docker Engine - Community
 Version:           23.0.1
 ......

3.3、启动minikube

minikube可以支持多种不同类型的驱动,这里我们使用docker。在命令行中输入以下命令启动minikube,其中--driver=docker指定了使用docker驱动,如果希望默认使用docker驱动,也可以执行命令minikube config set driver docker,--image-mirror-country--image-repository是非必须的,只是考虑到国外的源下载速度比较慢,替换成国内的加快速度。

[k8s@node3 ~]$ minikube start --image-mirror-country=cn --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --driver=docker
* minikube v1.29.0 on Centos 7.9.2009
* Using the docker driver based on user configuration
* Using Docker driver with root privileges
* Starting control plane node minikube in cluster minikube
* Pulling base image ...
* Downloading Kubernetes v1.26.1 preload ...
    > preloaded-images-k8s-v18-v1...:  397.05 MiB / 397.05 MiB  100.00% 3.98 Mi
    > index.docker.io/kicbase/sta...:  407.18 MiB / 407.19 MiB  100.00% 2.41 Mi
! minikube was unable to download gcr.io/k8s-minikube/kicbase:v0.0.37, but succe                                                                     ssfully downloaded docker.io/kicbase/stable:v0.0.37 as a fallback image
* Creating docker container (CPUs=2, Memory=2200MB) ...
* Preparing Kubernetes v1.26.1 on Docker 20.10.23 ...
  - Generating certificates and keys ...
  - Booting up control plane ...
! initialization failed, will try again: wait: /bin/bash -c "sudo env PATH="/var                                                                     /lib/minikube/binaries/v1.26.1:$PATH" kubeadm init --config /var/tmp/minikube/ku                                                                     beadm.yaml  --ignore-preflight-errors=DirAvailable--etc-kubernetes-manifests,Dir                                                                     Available--var-lib-minikube,DirAvailable--var-lib-minikube-etcd,FileAvailable--e                                                                     tc-kubernetes-manifests-kube-scheduler.yaml,FileAvailable--etc-kubernetes-manife                                                                     sts-kube-apiserver.yaml,FileAvailable--etc-kubernetes-manifests-kube-controller-                                                                     manager.yaml,FileAvailable--etc-kubernetes-manifests-etcd.yaml,Port-10250,Swap,N                                                                     umCPU,Mem,SystemVerification,FileContent--proc-sys-net-bridge-bridge-nf-call-ipt                                                                     ables": Process exited with status 1
stdout:
[init] Using Kubernetes version: v1.26.1
[preflight] Running pre-flight checks
[preflight] The system verification failed. Printing the output from the verific                                                                     ation:
KERNEL_VERSION: 3.10.0-1160.76.1.el7.x86_64
OS: Linux
CGROUPS_CPU: enabled
CGROUPS_CPUACCT: enabled
CGROUPS_CPUSET: enabled
CGROUPS_DEVICES: enabled
CGROUPS_FREEZER: enabled
CGROUPS_MEMORY: enabled
CGROUPS_PIDS: enabled
CGROUPS_HUGETLB: enabled
CGROUPS_BLKIO: enabled
[preflight] Pulling images required for setting up a Kubernetes cluster
[preflight] This might take a minute or two, depending on the speed of your inte                                                                     rnet connection
[preflight] You can also perform this action in beforehand using 'kubeadm config                                                                      images pull'
[certs] Using certificateDir folder "/var/lib/minikube/certs"
[certs] Using existing ca certificate authority
[certs] Using existing apiserver certificate and key on disk
[certs] Generating "apiserver-kubelet-client" certificate and key
[certs] Generating "front-proxy-ca" certificate and key
[certs] Generating "front-proxy-client" certificate and key
[certs] Generating "etcd/ca" certificate and key
[certs] Generating "etcd/server" certificate and key
[certs] etcd/server serving cert is signed for DNS names [localhost minikube] an                                                                     d IPs [192.168.49.2 127.0.0.1 ::1]
[certs] Generating "etcd/peer" certificate and key
[certs] etcd/peer serving cert is signed for DNS names [localhost minikube] and                                                                      IPs [192.168.49.2 127.0.0.1 ::1]
[certs] Generating "etcd/healthcheck-client" certificate and key
[certs] Generating "apiserver-etcd-client" certificate and key
[certs] Generating "sa" key and public key
[kubeconfig] Using kubeconfig folder "/etc/kubernetes"
[kubeconfig] Writing "admin.conf" kubeconfig file
[kubeconfig] Writing "kubelet.conf" kubeconfig file
[kubeconfig] Writing "controller-manager.conf" kubeconfig file
[kubeconfig] Writing "scheduler.conf" kubeconfig file
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/ku                                                                     belet/kubeadm-flags.env"
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.y                                                                     aml"
[kubelet-start] Starting the kubelet
[control-plane] Using manifest folder "/etc/kubernetes/manifests"
[control-plane] Creating static Pod manifest for "kube-apiserver"
[control-plane] Creating static Pod manifest for "kube-controller-manager"
[control-plane] Creating static Pod manifest for "kube-scheduler"
[etcd] Creating static Pod manifest for local etcd in "/etc/kubernetes/manifests                                                                     "
[wait-control-plane] Waiting for the kubelet to boot up the control plane as sta                                                                     tic Pods from directory "/etc/kubernetes/manifests". This can take up to 4m0s
[kubelet-check] Initial timeout of 40s passed.

Unfortunately, an error has occurred:
        timed out waiting for the condition

This error is likely caused by:
        - The kubelet is not running
        - The kubelet is unhealthy due to a misconfiguration of the node in some                                                                      way (required cgroups disabled)

If you are on a systemd-powered system, you can try to troubleshoot the error wi                                                                     th the following commands:
        - 'systemctl status kubelet'
        - 'journalctl -xeu kubelet'

Additionally, a control plane component may have crashed or exited when started                                                                      by the container runtime.
To troubleshoot, list all containers using your preferred container runtimes CLI                                                                     .
Here is one example how you may list all running Kubernetes containers by using                                                                      crictl:
        - 'crictl --runtime-endpoint unix:///var/run/cri-dockerd.sock ps -a | gr                                                                     ep kube | grep -v pause'
        Once you have found the failing container, you can inspect its logs with                                                                     :
        - 'crictl --runtime-endpoint unix:///var/run/cri-dockerd.sock logs CONTA                                                                     INERID'

stderr:
W0327 11:55:26.955321    1322 initconfiguration.go:119] Usage of CRI endpoints w                                                                     ithout URL scheme is deprecated and can cause kubelet errors in the future. Auto                                                                     matically prepending scheme "unix" to the "criSocket" with value "/var/run/cri-d                                                                     ockerd.sock". Please update your configuration!
        [WARNING FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /pro                                                                     c/sys/net/bridge/bridge-nf-call-iptables does not exist
        [WARNING Swap]: swap is enabled; production deployments should disable s                                                                     wap unless testing the NodeSwap feature gate of the kubelet
        [WARNING SystemVerification]: failed to parse kernel config: unable to l                                                                     oad kernel module: "configs", output: "modprobe: FATAL: Module configs not found                                                                      in directory /lib/modules/3.10.0-1160.76.1.el7.x86_64\n", err: exit status 1
        [WARNING Service-Kubelet]: kubelet service is not enabled, please run 's                                                                     ystemctl enable kubelet.service'
error execution phase wait-control-plane: couldn't initialize a Kubernetes clust                                                                     er
To see the stack trace of this error execute with --v=5 or higher

  - Generating certificates and keys ...
  - Booting up control plane ...- ^C

启动失败了,根据日志查询相关错误,在网络上几经查询才知道,这是因为Kuberntes的版本兼容的问题,dockershim 已在 Kubernetes 1.24 版本中被移除,继续使用Docker Engine的话会有相关报错。

只要使用--kubernetes-version=v1.23.8指定之前的版本即可,或者使用containerd等其他容器运行时。

[k8s@node3 ~]$ minikube start --image-mirror-country=cn --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --driver=docker --kubernetes-version=v1.23.8

启动结果如下图,看到Done的提示证明已经安装完成。

3.4、使用Dashboard

kubernetes为了方便集群的维护操作,提供了dashboard功能。dashboard包括了Cluster、Workloads、Service、Config and Storage、setting等多个模块功能,涵盖了kubernetes的方方面面,是个非常不错的管理GUI。

要使用dashboard,只需要执行以下命令,将会启动dashboard,打印出可访问的链接地址:

[docker@node3 ~]$ minikube dashboard
* Verifying dashboard health ...
* Launching proxy ...
* Verifying proxy health ...
* Opening http://127.0.0.1:42378/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser...
  http://127.0.0.1:42378/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/

启动过程中如果提示添加metrics-server插件扩展,使用以下命令即可:

[docker@node3 ~]$ minikube addons enable metrics-server
* metrics-server is an addon maintained by Kubernetes. For any concerns contact minikube on GitHub.
You can view the list of minikube maintainers at: https://github.com/kubernetes/minikube/blob/master/OWNERS
  - Using image registry.k8s.io/metrics-server/metrics-server:v0.6.2
* The 'metrics-server' addon is enabled

由于dashboard输出的地址是本地的IP地址,如果你是在虚拟机中部署,想在宿主机上进行访问,那么可以使用kubectl proxy开启代理访问。

首先安装kubectl,参照如下命令:

[docker@node3 ~]$ curl -LO https://dl.k8s.io/release/v1.23.8/bin/linux/amd64/kubectl
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   138  100   138    0     0    128      0  0:00:01  0:00:01 --:--:--   128
100 44.4M  100 44.4M    0     0  3720k      0  0:00:12  0:00:12 --:--:-- 5174k
[docker@node3 ~]$
[docker@node3 ~]$ ls
kubectl  minikube-linux-amd64  tmp.log
[docker@node3 ~]$ sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
[docker@node3 ~]$ kubectl version --client
Client Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.8", GitCommit:"a12b886b1da059e0190c54d09c5eab5219dd7acf", GitTreeState:"clean", BuildDate:"2022-06-16T05:57:43Z", GoVersion:"go1.17.11", Compiler:"gc", Platform:"linux/amd64"}

接着使用kubectl proxy开启代理:

[docker@node3 ~]$ kubectl proxy --port=8888 --address='192.168.56.13' --accept-hosts='^.*' &
[1] 10509
[docker@node3 ~]$ Starting to serve on 192.168.56.13:8888

在宿主机浏览器中访问如下:

查看workloads

查看node

还有其他众多丰富功能,不再罗列,自己搭建体验是最直接的。

3.5、异常问题解决

在安装的过程中可能会碰到各种错误问题,这里对我安装过程中遇到的问题进行总结,希望可以提供参考。

3.5.1、提示Docker失败

如果提示docker的一些失败,可以使用journalctl命令查看具体的日志输出辅助进行定位(基于centos系统),如:

sudo journalctl -xe
3.5.2、docker DNS配置

定位过程中发现DNS配置问题,可以在docker的配置文件中进行设置,配置文件为/etc/docker/daemon.json,可以在配置文件中配置DNS等内容,如:

{
  "dns": ["192.168.56.2"]
}
3.5.3、metrics-server启动失败

在dashboard中可以看到启动后提示metrics-server启动异常,如下所示:

点击红色圆点,查看失败的具体错误如下:

Failed to pull image "registry.k8s.io/metrics-server/metrics-server:v0.6.2@sha256:f977ad859fb500c1302d9c3428c6271db031bb7431e7076213b676b345a88dc2": rpc error: code = Unknown desc = Error response from daemon: Get "https://asia-east1-docker.pkg.dev/v2/k8s-artifacts-prod/images/metrics-server/metrics-server/manifests/sha256:f977ad859fb500c1302d9c3428c6271db031bb7431e7076213b676b345a88dc2": dial tcp 142.251.8.82:443: connect: connection refused

从提示上看是拉取镜像失败,这主要是国外源的问题,可以更换源提前下载镜像到本地:

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.6.2

然后将deployment使用的镜像修改为registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.6.2,如下,选择metrics-server这个deployment,选择edit

找到spec:containers:image进行修改

注意,k8s的配置文件中还有一个重要的属性imagePullPolicy属性,这个属性是描述镜像的拉取策略

  • Always 代表总是拉取镜像
  • IfNotPresent 本地有则使用本地镜像,不拉取,如果没有的话再拉取镜像(建议)
  • Never 只使用本地镜像,从不拉取,即使本地没有

在界面上重启deployment或者使用以下命令启动

kubectl rollout restart -n kube-system deployment metrics-server

重启后可以发现metrics-server正常启动。

3.6、删除minikube

如果希望清除环境重新安装,可以使用以下命令删除已经部署的Minikube集群。

minikube delete --all

四、kubernetes的基础用法

使用Kubernetes,除了通过dashboard,可以通过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。

[docker@node3 ~]$ kubectl get pod -A
NAMESPACE              NAME                                         READY   STATUS             RESTARTS      AGE
kube-system            coredns-65c54cc984-hb794                     1/1     Running            1 (14h ago)   14h
kube-system            etcd-minikube                                1/1     Running            1 (14h ago)   14h
kube-system            kube-apiserver-minikube                      1/1     Running            1 (14h ago)   14h

4.3、公开服务

在Kubernetes中,服务是一种将Pod公开为网络服务的机制。可以使用kubectl创建一个服务,使应用程序可以通过Kubernetes集群中的其他Pod或外部客户端访问。以下是一个示例:

kubectl expose deployment hello-minikube --type=NodePort --port=8080

这将创建一个服务Service,并将其公开为NodePort类型,使得可以通过Kubernetes集群中任何一个节点的IP地址和NodePort访问到服务。

4.4、访问应用程序:

可以使用kubectl命令行工具获取Minikube节点的IP地址和NodePort,然后在Web浏览器中访问该IP地址和NodePort,以访问应用程序。

minikube service hello-minikube --url

这将返回服务的URL,可以将其复制到Web浏览器中进行访问。

4.5、手动缩放Pod

可以使用kubectl命令行工具手动缩放Pod的数量,以满足当前的负载需求。例如,可以使用以下命令来将Pod的数量扩展到3个:

kubectl scale deployment my-app --replicas=3

4.6、删除资源

kubectl支持多种形式的删除资源的方法:

  1. 使用定义文件

    删除匹配 pod.json 文件中定义的类型和名称的 pod

    kubectl delete -f ./pod.json
    
  2. 使用名称

    删除指定名称的pod

    kubectl delete pod mypod
    
  3. 使用标签

    删除具有 name=mypod-label标签的pod

    kubectl delete pods -l name=mypod-label
    
  4. 使用namespace

    删除my-ns这个namespace下所有的pod

    kubectl -n my-ns delete po --all
    

kubernetes的用法还有很多,具体可以参考官方文档,不建议死记硬背,而是需要时使用,熟能生巧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/423752.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

迅为瑞芯微RK3568国产化实时操作系统,大容量内存

基于瑞芯微四核 64 位 Cortex-A55 ARMv8 架构处理器 RK3568&#xff0c;主频可达 2.0GHz&#xff0c;CPU 采用 22nm 制程工艺&#xff0c;动态调频调压技术&#xff0c;进一步放大能效比优势。 大容量内存 最大容量支持 8GB 内存&#xff0c;能够有效发挥处理器性能&#xff0…

服装标签二维码,要如何制作?含品牌案例

睡衣上的二维码标签、大衣的洗护说明二维码、衣服上的防伪二维码… 服装行业应用二维码&#xff0c;已经非常常见了。 服装行业中的二维码&#xff0c;不仅帮助品牌更好地展示产品信息、传播品牌影响力&#xff0c;更重要的是&#xff0c;通过这些服装二维码&#xff0c;直接优…

Attention is all your need——Transformer论文

摘要 此序列转录模型仅仅依赖于注意力机制&#xff0c;而不使用循环或者是卷积&#xff0c;将循环全部换成了multi-headed self- attention 介绍 RNN的特点、并行程度低。 Attention在RNN上的应用。 引入注意力机制&#xff0c;提高并行度。 背景 使用卷积对长的序列难以…

数据结构——排序

排序一、排序的概念二、直接插入排序希尔排序三、直接选择排序四、堆排序1、堆的概念2、堆排序五、冒泡排序六、快速排序七、归并排序八、基数排序排序算法的时间复杂度和空间复杂度一、排序的概念 课本概念&#xff08;P165&#xff09; (1&#xff09;内部排序。内部排序指…

一图看懂 pyexcel_io 模块:提供统一 API用来读写操作 Excel 文件的库, 资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创&#xff0c;转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 pyexcel_io 模块&#xff1a;提供统一 API用来读写操作 Excel 文件的库, 资料整理笔记&#xff08;大全&#xff09;摘要模块图类关系图模块全展开【pyexcel_io】统计常量s…

【LeetCode】剑指 Offer 59. 队列的最大值 p288 -- Java Version

1. 题目介绍&#xff08;59. 队列的最大值&#xff09; 面试题59&#xff1a;队列的最大值&#xff0c; 一共分为两小题&#xff1a; 题目一&#xff1a;滑动窗口的最大值题目二&#xff1a;队列的最大值 2. 题目1&#xff1a;滑动窗口的最大值 题目链接&#xff1a;https://l…

3.rabbitmq-集群

1.修改3台的主机名称,也可以不改 vi /etc/hostname 2.配置各个节点的host文件,让各节点都能识别对方 vi /etc/hosts 192.168.3.132 host-rabbitmq 192.168.3.133 host-rabbitmq2 192.168.3.134 host-rabbitmq3 3.以确保各个节点的cookie文件使用的同一个值 在node1上执行远程命…

基于矩阵分解的推荐算法

1.背景 推荐系统的两大应用场景分别是评分预测(Rating Prediction)和Top-N推荐(Item Ranking)。其中评分预测主要用于评价网站&#xff0c;比如用户给自己看过的电影评多少分&#xff0c;或者用户给自己看过的书籍评价多少分&#xff0c;矩阵分解技术主要应用于评分预测问题&am…

买车了

最近先后去试驾了比小鹏P7i、蔚来ET5、智己LS7、亚迪汉这几辆车&#xff0c;这四个品牌总共花了三天时间&#xff0c;也算是比较深度的试驾吧&#xff0c;静态和动态、前后排、主副驾都感受了一下。前面写了比亚迪汉的试驾体验&#xff0c;详细分析了它的优缺点&#xff1a;不愧…

Vue过滤器、自定义指令、组件

目录 一&#xff1a;生命周期 1.1 生命周期实例 1.2 生命周期函数&#xff08;引入&#xff09; 二&#xff1a;过滤器 三&#xff1a;自定义指令 四&#xff1a;组件 4.1 非单文件组件 4.2 组件的嵌套 4.3 单文件组件 模板 4.3.1 架构 4.3.2 不同版本的vue.JS 4…

ASRT语音识别系统部署及模型训练笔记

ASRT语音识别系统部署及模型训练笔记 前言 ASRT是一个中文语音识别系统&#xff0c;由AI柠檬博主开源在GitHub上。 GitHub地址&#xff1a;nl8590687/ASRT_SpeechRecognition 国内Gitee镜像地址&#xff1a;AI柠檬/ASRT_SpeechRecognition 文档地址&#xff1a;ASRT语音识…

ping telnet curl的使用方法和应用场景

文章目录一、区别二、使用方法pingtelnetcurl三、应用场景一、区别 ping命令基于ICMP协议&#xff0c;通过发送发送ICMP数据包&#xff0c;并查看对方是否有返回数据来检测网络是否连通&#xff0c;仅包含控制信息&#xff0c;不包含端口号; telnet是对服务器的远程登录&#…

全网火爆,Python接口自动化测试,从0到1分层封装框架撸码(带接口)

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 随着行业内卷越来越…

3D开发工具HOOPS最新解析合集,助力实现web端高性能模型渲染

一、3D技术为创新提供强大助力 不管您想搭建桌面、WEB或者移动端APP应用&#xff0c;技术领先全球的HOOPS Platform组件都可以为您提供弹性的3D集成架构&#xff0c;同时&#xff0c;一批可信任的工业领域3D技术专家也将为您提供技术支持服务。 如果您的客户期望有一种在多个…

Docker 配置远程访问

Docker客户端通常通过Unix套接字在本地与守护程序通信 /var/run/docker.sock&#xff0c;或通过网络通过TCP套接字。 以下是启动时提供给Docker守护程序的选项的典型示例&#xff1a; # ps -ef |grep dockerd root 23438 1 0 00:41 ? 00:00:03 /usr/bin/dock…

Spring入门案例--IOC入门案例

IOC入门案例思路分析 (1)Spring是使用容器来管理bean对象的&#xff0c;那么管什么? 主要管理项目中所使用到的类对象&#xff0c;比如(Service和Dao) (2)如何将被管理的对象告知IOC容器? 使用配置文件 (3)被管理的对象交给IOC容器&#xff0c;要想从容器中获取对象&…

TCP协议详解

1.TCP的准备条件在古代的时候&#xff0c;古人们经常写书信进行交流&#xff0c;写书信的前提是你要知道这份信是要寄给谁在网络中&#xff0c;我们通过ip端口号找对目标对象&#xff0c;但是现在网站一般会对ip端口注册一个域名&#xff0c;所以我们一般就是对域名进行查找&am…

minikube安装与运行(阿里云环境运行)

说下为啥选择云环境&#xff0c;最开始在本地电脑上安装的minikube&#xff0c;但是由于国内的网络访问不了谷歌的镜像仓库&#xff0c;安装ingress-nginx或者其他插件时着实的恶心。要不翻墙&#xff0c;要不自己搭建个镜像仓库。最终决定用阿里云境外的节点&#xff0c;按小时…

Windows操作系统C盘快速扩容工具推荐

Windows 系统C 盘扩容教程 1️⃣前言 大家在使用电脑过程中&#xff0c;随着时间的推移&#xff0c;经常会发现C盘空间爆红的情况&#xff0c;主 要原因是电脑软件在使用过程中产生的缓存文件或者日志文件大部分都会存储在C盘&#xff0c;这样时间一久&#xff0c;C盘的存储空…

不联网新华字典

介绍 首页字典 更多 包含内容 内容对应Json数据文件百家姓baijiaxing.json曹操诗集caocao.json弟子规dizigui.json成语idiom.json论语lunyu.json纳兰性德诗集nalanshiji.json千家诗qianjiashi.json千字文qianziwen.json三字经-传统版sanzijing_ct.json三字经-新版sanzijing_x…