Kubernetes的介绍(组件、Pod)和 安装使用

news2024/11/16 18:40:07

目录

Kubernetes是什么?

跟Kubernetes相似的软件:

k8s里有哪些组件?

官方网站:Kubernetes 组件 | Kubernetes

master上的Control Plane组件        

什么是组件?

Pod是什么呢?

1、kube-apiserver  (API Server)

2、etcd

3、scheduler

4、controller-manager

5、cloud-controller-manager 云控制器的管理器 

Node上的组件

1、kubelet

2、kube-proxy

还有一些辅助组件

K8s的安装方式:

部署k8s集群(安装k8s)

集群的架构:

实验环境:

步骤:

1、准备环境

2、关闭selinux和firewalld

3、安装docker,如果已经安装好了,就启动docker,并设置开机启动

安装docker参考文章:(70条消息) docker容器的介绍_Claylpf的博客-CSDN博客 

4、升级所有的软件,提升系统的安全性 (可选择不做,很消耗时间,需要网速快)

5、设置docker 使用systemd作为默认的Cgroup驱动

6、关闭swap分区

7、重新命名主机名,在所有主机上添加如下命令,修改hosts文件

8、修改内核参数,添加一些需要使用的内核参数

9、安装kubeadm,kubelet 和 kubectl()

10、部署Kubernetes Master

11、node节点服务器加入k8s集群(在所有的node节点执行)

12、安装网络插件flannel(在master上执行)(实现master上的pod和node节点上的pod之间的通信)(k8s的网络插件:flannel 和 calico)(实现跨主机通信,都支持docker的overlay模式(跨主机通信模式))

flannel 和 calico的区别:Flannel和Calico网络插件对比 - 小家电维修 - 博客园 (cnblogs.com)

下载最新版本的flannel网络插件,重新安装

网址:Gitee 极速下载/flannel

13、测试Kubernetes是否安装成功(Pod的创建)


Kubernetes是什么?

Kubernetes, also known as K8s, is an open-source system for automating deployment, scaling, and management of containerized applications.

Kubernetes 也称为 K8s,是用于自动部署扩缩和管理容器化应用程序的开源系统

代码--》程序--》镜像--》容器--》docker--》k8s

因此我们可以说有代码的地方就可以有k8s

跟Kubernetes相似的软件:

compose:是容器编排的软件 --》只能在本机器上启动多个容器

swarm:是compose的升级版 可以在很多台机器上编排容器

k8s:可以在很多台机器上编排容器


 

k8s里有哪些组件?

官方网站:Kubernetes 组件 | Kubernetes

上图解释:

k8s是一个容器集群管理软件,管理的服务器会有很多台,而每一台服务器会存在 node 

而node 就是一个节点服务器,存在两种模式:

        master --》是领导,领导员工worker的

        node --》worker,node节点服务器是运行业务相关的容器

Control Plane 控制平面/控制台 --》很多的组件,这些组件可以用来实现k8s的管理功能 

这些组件安装在一台服务器上,这台服务器我们称为master

master上的Control Plane组件        

什么是组件?

组件就是一个pod,pod里有很多的容器,运行相关的软件,会有相应的docker镜像文件

Pod是什么呢?

Pod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。

Pod是一组一个或者多个应用程序容器(例如docker或者rkt),包括共享存储(卷),IP地址和有关如何运行他们的信息

一个Pod里面可以有很多的容器,所有的容器都共享一个IP地址,因为所有的容器都共用相同的命名空间

容器有哪些命名空间:Mount Namespace(挂载命名空间)、UTS Namespace(UTS命名空间)、IPC Namespace(IPC命名空间)、PID Namespace(PID命名空间)、Network Namespace(网络命名空间)、Network Namespace(网络命名空间)

Pod 类似于共享名字空间并共享文件系统卷的一组容器。

Pod内所有的容器共享1个IP地址。         

1、kube-apiserver  (API Server)

API 服务器是 Kubernetes 控制平面的组件, 该组件负责公开了 Kubernetes API,负责处理用户和其他组件接受请求的工作。 API 服务器是 Kubernetes 控制平面的前端。(给k8s提供接口服务,是k8s的人口,通过这个接口我们可以了解整个k8s里的信息和资源)

2、etcd

etcd 是 Kubernetes 使用的分布式键值存储系统,用于存储集群的状态和配置信息。它提供高可用性和一致性保证,是 Kubernetes 的重要组件之一。一致且高可用的键值存储,用作 Kubernetes 所有集群数据的后台数据库。(就是k8s使用的数据库)

3、scheduler

调度器,kube-scheduler是控制平面的组件, 负责监视新创建的、未指定运行节点(node)的 Pods, 并选择节点来让 Pod 在上面运行。Scheduler 负责将 Pod(容器组)分配到集群中的节点上,根据各种策略(如资源需求、亲和性和反亲和性等)进行调度决策。

4、controller-manager

管理控制器的程序kube-controller-manager 包含多个控制器,用于监视集群状态并确保所需的资源状态符合预期。

控制器:deployment 部署Pod的控制器

replicaSET 副本控制器

节点控制器(Node Controller):负责在节点出现故障时进行通知和响应

任务控制器(Job Controller):监测代表一次性任务的 Job 对象,然后创建 Pods 来运行这些任务直至完成

端点分片控制器(EndpointSlice controller):填充端点分片(EndpointSlice)对象(以提供 Service 和 Pod 之间的链接)。

服务账号控制器(ServiceAccount controller):为新的命名空间创建默认的服务账号(ServiceAccount)。

5、cloud-controller-manager 云控制器的管理器 

一个 Kubernetes 控制平面组件, 嵌入了特定于云平台的控制逻辑。云控制器管理器(Cloud Controller Manager)允许你将你的集群连接到云提供商的 API 之上, 并将与该云平台交互的组件同与你的集群交互的组件分离开来。

下面的控制器都包含对云平台驱动的依赖:

节点控制器(Node Controller):用于在节点终止响应后检查云提供商以确定节点是否已被删除

路由控制器(Route Controller):用于在底层云基础架构中设置路由

服务控制器(Service Controller):用于创建、更新和删除云提供商负载均衡器

Node上的组件

1、kubelet

kubelet会在集群中每个节点(node)上运行。 它保证容器(containers)都运行在 Pod 中。每个节点上都运行一个 kubelet 进程,它是集群中的代理,负责与 Kubernetes 控制平面通信,并管理该节点上的容器。它还监视 Pod 的运行状况,并确保所需的容器在节点上正常运行。

在master上启动Pod并在node节点服务器上运行        

2、kube-proxy

kube-proxy 是集群中每个节点(node)上所运行的网络代理, 实现 Kubernetes 服务(Service) 概念的一部分。kube-proxy 是网络代理组件,负责实现 Kubernetes 集群内部的网络通信。它维护网络规则,并管理节点上的网络流量转发

kube-proxy 维护节点上的一些网络规则, 这些网络规则会允许从集群内部或外部的网络会话与 Pod 进行网络通信

还有一些辅助组件

  • CoreDNS用于集群中 DNS 服务的插件,提供 DNS 解析服务,使应用能够通过服务名称进行访问。
  • kube-dns:旧版 DNS 插件,提供与 CoreDNS 类似的功能。
  • Container Runtime:容器运行时,如 Docker、Containerd 等,负责管理和执行容器
  • Ingress Controller处理入口流量并将其路由到集群内适当的服务的组件。
  • Dashboard:Kubernetes 的 Web 用户界面,可用于可视化管理和监控集群。

K8s的安装方式:

1、minikube(微小版本k8s)

2、使用kubeadm 安装k8s 是k8s官方推荐的安装方式

3、二进制安装

4、第3方的部署工具:rancher等

部署k8s集群(安装k8s)

集群的架构:

        1、单master多node

        2、多master多node  --》高可用

实验环境:

        1个master2~3个node

        软件:centos7.9 docker

        硬件:2G/2C

        1个master 3个node

步骤:

1、准备环境

我们采用 kubeadm方式安装

master 192.168.2.150

node1 192.168.2.149

node2 192.168.2.210

node3 192.168.2.212

建议ip地址使用静态IP(桥接模式),固定下来,防止ip地址变动影响整个集群,导致整个集群异常

2、关闭selinux和firewalld

[root@mysql ~]# service firewalld stop
Redirecting to /bin/systemctl stop firewalld.service
[root@mysql ~]# systemctl disable firewalld
[root@mysql ~]# 


 

3、安装docker,如果已经安装好了,就启动docker,并设置开机启动

安装docker参考文章:(70条消息) docker容器的介绍_Claylpf的博客-CSDN博客 

查看docker版本 docker --version 

4、升级所有的软件,提升系统的安全性 (可选择不做,很消耗时间,需要网速快)

yum install updata -y

5、设置docker 使用systemd作为默认的Cgroup驱动

每台服务器上都需要操作,master和node都需要执行下面的脚本,会产生/etc/docker/daemon.json文件

[root@mysql ~]# cat <<EOF > /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
[root@mysql ~]# 

重启docker服务

[root@mysql ~]# systemctl restart docker 

6、关闭swap分区

k8s不让我们使用swap分区来存储数据,因为使用swap会降低系统性能

每台服务器都得进行

swapoff -a     #临时关闭
sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab   #永久关闭

让我们逐步解释这个命令的每个部分:

sed: 是一个流式文本编辑器,用于对文本进行模式匹配和替换操作。
-i: 是sed命令的选项之一,表示直接在原始文件上进行修改,而不是输出到屏幕或另一个文件。
'/swap/: 是一个模式,表示要匹配的文本模式为"swap"。
s/^\(.*\)$/#\1/g: 是一个替换命令,用来将匹配到的行首的内容替换为"#"+行首内容。具体解释如下:
s/: 是替换命令的开始。
^: 表示行首。
\(.*\): 使用括号捕获整行的内容,保存到临时缓冲区 \1 中。
$: 表示行尾。
/#\1/: 将整行前面添加"#"字符。
/g: 替换所有匹配到的内容,而不仅仅是第一个匹配。
综上所述,该命令的作用是在/etc/fstab文件中找到包含"swap"的行,并将其行首的内容用"#"注释掉。这通常用于禁用或注释掉/etc/fstab文件中的swap行

我们可以通过free -m来查看系统系统性能

(打开swap分区使用swapon -a命令)

7、重新命名主机名,在所有主机上添加如下命令,修改hosts文件

每台机器上的/etc/host文件都需要修改

[root@node3 ~]# cat >> /etc/hosts << EOF
192.168.2.150 master
192.168.2.149 node1
192.168.2.210 node2
192.168.2.212 node3
EOF
[root@node3 ~]# 

8、修改内核参数,添加一些需要使用的内核参数

每台机器上都需要修改(master和node)

[root@master ~]# cat <<EOF >> /etc/sysctl.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF

使用sysctl -p 让内核重新读取数据,加载生效

[root@master ~]# sysctl -p

9、安装kubeadm,kubelet 和 kubectl()

集群里的每一台机器都需要安装

执行如下脚本

[root@master ~]#cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
[root@master ~]# 

安装 kubeadm,kubelet 和 kubectl,并且指定版本(如果不指定版本,就会安装最新版本的软件,而1.24版本后默认的容器运行时的环境就已经不是  docker  了)

[root@master ~]# yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6

设置开机启动k8s(因为kubelet是k8s在node节点上的代理,必须要开机启动的)

systemctl enable kubelet

10、部署Kubernetes Master

提前准备coredns:1.8.4的镜像,后面需要使用,需要在每台机器上下载镜像( 需要使用date同步时间,否则拉取镜像的时候会报错 )

[root@node3 ~]# docker pull coredns/coredns:1.8.4
1.8.4: Pulling from coredns/coredns
c6568d217a00: Pull complete 
bc38a22c706b: Pull complete 
Digest: sha256:6e5a02c21641597998b4be7cb5eb1e7b02c0d8d23cce4dd09f4682d463798890
Status: Downloaded newer image for coredns/coredns:1.8.4
docker.io/coredns/coredns:1.8.4

[root@master ~]# docker tag coredns/coredns:1.8.4 registry.aliyuncs.com/google_containers/coredns:v1.8.4

[root@master ~]# docker images
REPOSITORY                                        TAG       IMAGE ID       CREATED       SIZE
coredns/coredns                                   1.8.4     8d147537fb7d   2 years ago   47.6MB
registry.aliyuncs.com/google_containers/coredns   v1.8.4    8d147537fb7d   2 years ago   47.6MB
[root@master ~]# 

初始化Kubernetes Master操作在master服务器上执行

kubeadm init \
--apiserver-advertise-address=192.168.2.150 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.6 \
--service-cidr=10.1.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \


#可以根据情况添加
--ignore-preflight-errors=all

参数说明:

--apiserver-advertise-address=192.168.150.102                            

master主机的IP地址,例如我的Master主机的IP是:192.168.150.102

--image-repository=registry.aliyuncs.com/google_containers       

镜像地址,由于国外地址无法访问,故使用的阿里云仓库地址:registry.aliyuncs.com/google_containers

--kubernetes-version=v1.23.6                                                       

下载的k8s软件版本号

--service-cidr=10.1.0.0/12                                                           

参数后的IP地址直接就套用10.1.0.0/12 ,以后安装时也套用即可,不要更改

--pod-network-cidr=10.244.0.0/16                                               

k8s内部的pod节点之间网络可以使用的IP段,不能和service-cidr写一样,如果不知道怎么配,就先用这个10.244.0.0/16

--ignore-preflight-errors=all

在使用 kubeadm init 命令初始化 Kubernetes 控制平面时,系统会进行一系列的预检查以确保环境满足最低要求,例如检查网络设置、内核参数等。如果发现任何不符合要求的问题,该命令将会中断并显示错误信息。

通过添加 --ignore-preflight-errors=all 选项,您可以告诉 kubeadm init 忽略所有的预检错误,即使有不符合要求的环境条件,也会继续执行初始化过程。

请注意,使用此选项可能会导致 Kubernetes 集群处于不稳定或不安全的状态。因此,在使用该选项之前,请确保您了解可能存在的风险,并确认您知道如何处理和解决与特定预检错误相关的问题。

执行成功后产生如下所示

如下所示(每台master机器产生的密钥命令都是不同的)

kubeadm join 192.168.2.150:6443 --token gh67vr.56y8rblrojjsrdnq \
	--discovery-token-ca-cert-hash sha256:dc456f30010fd56e73a9a9a25bab1e393817b92f45fc717dd7431a4047ba0d39 

并且我们需要按照提示在master上执行(完成初始化的新建文件和目录的操作,如果不执行就会无法使用kubectl get node命令)

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

注:如果程序执行的过程中出现了一些错误,我们可以使用kubeadm reset重新启动k8s初始化,我们就可以从新输入一边kubeadm init,对k8s进行初始化(master 和 node上都可以执行)

[root@master ~]# kubeadm reset

11、node节点服务器加入k8s集群(在所有的node节点执行)

测试node1节点是否能和master通信

[root@node1 ~]# ping master
PING master (192.168.2.150) 56(84) bytes of data.
64 bytes from master (192.168.2.150): icmp_seq=1 ttl=64 time=0.645 ms
64 bytes from master (192.168.2.150): icmp_seq=2 ttl=64 time=0.602 ms
64 bytes from master (192.168.2.150): icmp_seq=3 ttl=64 time=0.591 ms
^C
--- master ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.591/0.612/0.645/0.036 ms
[root@node1 ~]# 

测试通过后,在所有node上添加上面master产生的命令(添加密钥)注意是node上,master上不需要

kubeadm join 192.168.2.150:6443 --token gh67vr.56y8rblrojjsrdnq \
	--discovery-token-ca-cert-hash sha256:dc456f30010fd56e73a9a9a25bab1e393817b92f45fc717dd7431a4047ba0d39 

添加成功后的图片:

在master上输入kubectl get node 查看效果

所有的node节点都需要加入到k8s集群里面,查看集群里的机器

[root@master ~]# kubectl get node
NAME     STATUS     ROLES                  AGE   VERSION
master   NotReady   control-plane,master   19m   v1.23.6
node1    Ready      <none>                 24s   v1.23.6
node2    Ready      <none>                 18s   v1.23.6
node3    Ready      <none>                 13s   v1.23.6

如果出现如下错误: 

[root@master ~]# kubectl get node
NAME     STATUS     ROLES                  AGE     VERSION
master   NotReady   control-plane,master   47m     v1.23.6
node1    NotReady   <none>                 2m41s   v1.23.6
node2    NotReady   <none>                 2m39s   v1.23.6
node3    NotReady   <none>                 2m34s   v1.23.6
[root@master ~]# 

如上所示,NotReady 说明master和node节点之间的通信还是有问题的,说明容器之间的通信还没有准备好,我认为可能是没有下载网络插件,或者可能是网络或者端口出现了问题,这是虚拟机自带的问题,我们先跳过这个错误,进行下一步。

k8s删除node节点的方法:

(删除k8s里的node1节点:

kubectl drain node1 --delete-emptydir-data --force --ignore-daemonsets node/node1 

kubectl delete node node1)

12、安装网络插件flannel(在master上执行)(实现master上的pod和node节点上的pod之间的通信)(k8s的网络插件:flannel 和 calico)(实现跨主机通信,都支持docker的overlay模式(跨主机通信模式))

flannel 和 calico的区别:Flannel和Calico网络插件对比 - 小家电维修 - 博客园 (cnblogs.com)

需要kube-flannel.yaml 文件

参考文档:(70条消息) Kubernetes( k8s)部署搭建_在k8s项目中,kubelet这个组件你是怎么部署的,为什么这么做_china-zhz的博客-CSDN博客

应用kube-flannel.yaml文件(需要最新版本的)(下面演示的是安装了版本落后的kube-flannel.yaml文件而后出现的错误)

[root@master ~]# kubectl apply -f kube-flannel.yml 
如果出现警告,往后看,下载最新版本的kube-flannel.yml 

检查是否安装成功:

[root@master ~]# kubectl get namespace  #查找命名空间
NAME              STATUS   AGE
default           Active   3h49m
kube-node-lease   Active   3h49m
kube-public       Active   3h49m
kube-system       Active   3h49m
[root@master ~]# kubectl get pod -n kube-system  #找到flannel #查看kube-system命名空间里的pod
NAME                             READY   STATUS    RESTARTS   AGE
coredns-6d8c4cb4d-9jzpp          0/1     Pending   0          3h49m
coredns-6d8c4cb4d-znwwk          0/1     Pending   0          3h49m
etcd-master                      1/1     Running   0          3h49m
kube-apiserver-master            1/1     Running   0          3h49m
kube-controller-manager-master   1/1     Running   0          3h49m
kube-flannel-ds-8vfxd            1/1     Running   0          26m
kube-flannel-ds-gjsnw            1/1     Running   0          26m
kube-flannel-ds-m444b            1/1     Running   0          26m
kube-flannel-ds-pcdj5            1/1     Running   0          26m
kube-proxy-9gvf5                 1/1     Running   0          3h4m
kube-proxy-gv2hk                 1/1     Running   0          3h49m
kube-proxy-vr4kb                 1/1     Running   0          3h4m
kube-proxy-vv6xv                 1/1     Running   0          3h4m
kube-scheduler-master            1/1     Running   0          3h49m
[root@master ~]# 

其实k8s很聪明的:它会使用管理功能的pod去管理其他业务的pod

使用kubectl get node 去查看k8s是否准备成功

[root@master ~]# kubectl get node
NAME     STATUS     ROLES                  AGE     VERSION
master   NotReady   control-plane,master   3h58m   v1.23.6
node1    NotReady   <none>                 3h13m   v1.23.6
node2    NotReady   <none>                 3h13m   v1.23.6
node3    NotReady   <none>                 3h13m   v1.23.6
[root@master ~]# 

发现还是NotReady状态,寻找错误 

[root@master ~]# kubectl get pod -n kube-system
NAME                             READY   STATUS    RESTARTS   AGE
coredns-6d8c4cb4d-9jzpp          0/1     Pending   0          4h1m   #发现coredns启动失败
coredns-6d8c4cb4d-znwwk          0/1     Pending   0          4h1m
etcd-master                      1/1     Running   0          4h2m
kube-apiserver-master            1/1     Running   0          4h2m
kube-controller-manager-master   1/1     Running   0          4h2m
kube-flannel-ds-8vfxd            1/1     Running   0          39m
kube-flannel-ds-gjsnw            1/1     Running   0          39m
kube-flannel-ds-m444b            1/1     Running   0          39m
kube-flannel-ds-pcdj5            1/1     Running   0          39m
kube-proxy-9gvf5                 1/1     Running   0          3h16m
kube-proxy-gv2hk                 1/1     Running   0          4h1m
kube-proxy-vr4kb                 1/1     Running   0          3h16m
kube-proxy-vv6xv                 1/1     Running   0          3h16m
kube-scheduler-master            1/1     Running   0          4h2m
[root@master ~]# 

我们查看coredns-6d8c4cb4d-9jzpp 的详细信息:

[root@master ~]# kubectl describe pod coredns-6d8c4cb4d-znwwk -n kube-system

发现coredns pod启动失败,主要是flannel网络插件版本有点低了,导致兼容性不好,启动coredns组件不成功

下载最新版本的flannel网络插件,重新安装

网址:Gitee 极速下载/flannel

删除之前版本的flannel

[root@master ~]# rm -rf $(find / -name "flannel")
或者使用
kubectl delete -f kube-flannel.yml

重新导入 kube-flannel.yml文件

[root@master ~]# kubectl apply -f kube-flannel.yml 
必须没有警告,如果有警告,则说明版本还是太低了

查看最终效果 

[root@master ~]# kubectl get node      #状态都为Ready,说明启用成功
NAME     STATUS   ROLES                  AGE     VERSION
master   Ready    control-plane,master   6h5m    v1.23.6
node1    Ready    <none>                 5h19m   v1.23.6
node2    Ready    <none>                 5h19m   v1.23.6
node3    Ready    <none>                 5h19m   v1.23.6
[root@master ~]# 

[root@master ~]# kubectl get pod -n kube-system
NAME                             READY   STATUS    RESTARTS   AGE
coredns-6d8c4cb4d-9jzpp          1/1     Running   0          6h3m
coredns-6d8c4cb4d-znwwk          1/1     Running   0          6h3m
etcd-master                      1/1     Running   0          6h3m
kube-apiserver-master            1/1     Running   0          6h3m
kube-controller-manager-master   1/1     Running   0          6h3m
kube-flannel-ds-8vfxd            1/1     Running   0          160m
kube-flannel-ds-gjsnw            1/1     Running   0          160m
kube-flannel-ds-m444b            1/1     Running   0          160m
kube-flannel-ds-pcdj5            1/1     Running   0          160m
kube-proxy-9gvf5                 1/1     Running   0          5h18m
kube-proxy-gv2hk                 1/1     Running   0          6h3m
kube-proxy-vr4kb                 1/1     Running   0          5h18m
kube-proxy-vv6xv                 1/1     Running   0          5h18m
kube-scheduler-master            1/1     Running   0          6h3m

我们可以使用ip add查看flannel提供给我的IP地址:

4: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN group default 
    link/ether 72:e4:b4:e5:c7:c4 brd ff:ff:ff:ff:ff:ff
    inet 10.244.0.0/32 brd 10.244.0.0 scope global flannel.1
       valid_lft forever preferred_lft forever
    inet6 fe80::70e4:b4ff:fee5:c7c4/64 scope link 
       valid_lft forever preferred_lft forever

查看k8s的命名空间

[root@master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   6h14m
kube-flannel      Active   13m
kube-node-lease   Active   6h14m
kube-public       Active   6h14m
kube-system       Active   6h14m
[root@master ~]# 

上面代码解释:

命名空间: namespace 用来进行资源隔离的

default   是默认存放业务pod的,业务pod在创建的时候,可以自己去指定到哪个命名空间,如果不指定就会在default中

注:kubectl get pod 默认只会显示default内的Pod

如果我们需要显示其他命名空间的Pod,我们就需要使用命令: kubectl get pod -n kube-system啦

查看kube-flannel 的pod 和 起对应的额外的信息(IP、node等)

[root@master ~]# kubectl get pod -n kube-flannel
NAME                    READY   STATUS    RESTARTS   AGE
kube-flannel-ds-2l4cj   1/1     Running   0          16m
kube-flannel-ds-6gbsm   1/1     Running   0          16m
kube-flannel-ds-nxwk7   1/1     Running   0          16m
kube-flannel-ds-qxzpw   1/1     Running   0          16m
[root@master ~]# kubectl get pod -n kube-flannel -o wide   #也可以使用 -O 代替 -o wide
NAME                    READY   STATUS    RESTARTS   AGE   IP              NODE     NOMINATED NODE   READINESS GATES
kube-flannel-ds-2l4cj   1/1     Running   0          16m   192.168.2.150   master   <none>           <none>
kube-flannel-ds-6gbsm   1/1     Running   0          16m   192.168.2.149   node1    <none>           <none>
kube-flannel-ds-nxwk7   1/1     Running   0          16m   192.168.2.212   node3    <none>           <none>
kube-flannel-ds-qxzpw   1/1     Running   0          16m   192.168.2.210   node2    <none>           <none>
[root@master ~]# 

 查看flanneld监听对应的端口

[root@master ~]# netstat -anpult|grep flannel
tcp        0      0 192.168.2.150:44278     10.0.0.1:443            ESTABLISHED 22717/flanneld      
[root@master ~]# 

13、测试Kubernetes是否安装成功(Pod的创建)

能否创建一个新的命名空间

[root@master ~]# kubectl create namespace sc  #创建一个新的命名空间
namespace/sc created
[root@master ~]# kubectl get ns      
NAME              STATUS   AGE
default           Active   70m
kube-flannel      Active   47m
kube-node-lease   Active   70m
kube-public       Active   70m
kube-system       Active   70m
sc                Active   9s
[root@master ~]# 

能否使用命令去启用一个Pod呢?

[root@master ~]# kubectl create deployment k8s-nginx --image=nginx -r 3
deployment.apps/k8s-nginx created
#创建装有nginx容器的Pod
  • kubectl create deployment:这是一个创建部署的命令。
  • k8s-nginx:这是部署的名称,您可以根据自己的需求进行更改。
  • --image=nginx:这是部署所使用的容器镜像,这里使用的是 nginx 镜像。您可以替换成其他合适的镜像。
  • -r 3:这是设置部署的副本数为 3,意味着将会创建 3 个相同的 Pod 实例来运行 nginx 容器。

验证pod是否创建成功

[root@master ~]# kubectl get pod
NAME                         READY   STATUS              RESTARTS   AGE
k8s-nginx-6d779d947c-f72hf   0/1     ContainerCreating   0          2m21s
k8s-nginx-6d779d947c-hnhf5   0/1     ContainerCreating   0          2m21s
k8s-nginx-6d779d947c-xgjzg   1/1     Running             0          2m21s
[root@master ~]# kubectl get deploy
NAME        READY   UP-TO-DATE   AVAILABLE   AGE
k8s-nginx   1/3     3            1           2m25s
[root@master ~]# kubectl get pod -o wide
NAME                         READY   STATUS              RESTARTS   AGE     IP           NODE    NOMINATED NODE   READINESS GATES
k8s-nginx-6d779d947c-f72hf   0/1     ContainerCreating   0          2m35s   <none>       node1   <none>           <none>
k8s-nginx-6d779d947c-hnhf5   0/1     ContainerCreating   0          2m35s   <none>       node3   <none>           <none>
k8s-nginx-6d779d947c-xgjzg   1/1     Running             0          2m35s   10.244.2.2   node2   <none>           <none>
[root@master ~]# 

但是现在给pod分配的IP地址只是内网IP,外面的访问不进来,如果我们想用我们的浏览器访问我们的nginx容器,那我们就需要使用k8s带的服务发布(service服务)功能了。

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

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

相关文章

Oracle的CentOS安装

1.CentOS环境 阿里云轻量型服务器 2核-4g内存-80G系统盘 2.Oracle下载 Oracle下载 Oracle 数据库免费 CPU 限制 Oracle 数据库免费版自动将自身限制为两个内核进行处理。例如&#xff0c;在具有 2 个双核 CPU&#xff08;四个核&#xff09;的计算机上&#xff0c;如果大量…

【在线文件管理】响应式文件管理AngularJS

目录 1.功能展示截图 2.实现代码 2.1HTML页面代码 2.2后台代码 2.2.1项目结构 2.2.2项目代码 其他问题 1.功能展示截图 项目中需要用到文件管理来自由控制文件的上传、下载、删除等&#xff0c;就想到做一个简单的在线文件管理功能。 支持在线编辑&#xff1a; 2.实现代…

Java基础---SPI

目录 典型回答 从面向接口编程说起 接口位于调用方所在的包中 接口位于实现方所在的包中 注意 如何定义一个SPI SPI的实现原理 SPI的应用场景 典型回答 Java中区分 API 和 SPI&#xff0c;通俗的讲&#xff1a;API 和 SPI 都是相对的概念&#xff0c;他们的差别只在语义…

从零开始的Android逆向工程,开启对应用程序内部的探索之旅

Android逆向有那些发展方向 安全评估&#xff1a; 逆向工程可以帮助安全专家分析和评估Android应用程序的安全性。通过逆向应用程序&#xff0c;发现潜在的漏洞和安全隐患&#xff0c;并提供改进建议&#xff0c;以加强应用程序的安全性。 应用改进和优化&#xff1a; 逆向…

java编码转换过程

常见的JAVA程序包括以下类别&#xff1a; *直接在console上运行的类(包括可视化界面的类) *JSP代码类&#xff08;注&#xff1a;JSP是Servlets类的变型&#xff09; *Servelets类 *EJB类 *其它不可以直接运行的支持类 这些类文件中&#xff0c;都有可能含有中文字符串&…

KDE缺少全屏启动器的解决办法

我记得以前KDE是有一个全局搜索的启动起来着&#xff0c;但是重装了一次之后发现只剩下一个半屏的了。解决方案如下 sudo apt-get install plasma-widgets-addons

三菱PLC 红绿灯 步进指令 STL

自己写的红绿灯。 有启动、停止两个按钮。 南北通行4S&#xff0c;东西通行5S。 链接: https://caiyun.139.com/m/i?0E5CJEoVGt4D0 提取码:kVOA SET(启动,启动标志); RST(启动,停止标志); SET(停止,停止标志); RST(停止,启动标志); RST(LDP(TRUE,停止),T0); RST(LDP(TRUE…

范德波尔方程可视化

Van der Pol方程如下所示 d x d t y d y d t − x ( 1 − x 2 ) y \begin{equation} \begin{aligned} \frac{dx}{dt} & y \\ \frac{dy}{dt} & -x(1-x^2)y \end{aligned} \end{equation} dtdx​dtdy​​y−x(1−x2)y​​​ 相应的程序如下 为了观看长期趋势&…

VUE项目打包成apk

在我们的开发需求中&#xff0c;可能会遇到需要将vue项目中的H5代码打包成一个安卓的app&#xff0c;那么我为大家介绍一套保姆级的解决方案&#xff0c;看完你就会。 VUE HBuilder 1.准备工作&#xff1a; 需要下载一个HBuilder X编辑器&#xff0c;不过我相信大家身为前端…

最适合新手的SpringBoot+SSM项目《苍穹外卖》实战—(四)集成 Swagger

文章目录 Swagger 介绍集成 Swagger常用注解 黑马程序员最新Java项目实战《苍穹外卖》&#xff0c;最适合新手的SpringBootSSM的企业级Java项目实战。 Swagger 介绍 Swagger 是一个开源的 API 设计工具&#xff0c;它可以用于描述、设计、开发和测试 RESTful API。 它提供了一…

【C++11】 线程库的使用

文章目录 1 线程库的基本使用1.1 thread1.2 this_thread1.3 线程函数参数 2 mutex2.1 mutex的基本使用2.2 mutex系列锁2.3 lock_guard与unique_lock 3 原子操作4 条件变量 1 线程库的基本使用 1.1 thread 在C11之前&#xff0c;涉及到多线程问题&#xff0c;都是和平台相关的&…

研究一下「pnpm」这个神奇的包管理工具

最近搬砖 &#x1f9f1; 在搞前端项目部署优化 &#x1f3a1;&#xff0c;大部分项目的包管理工具都已经从 npm/yarn 替换成了 pnpm&#xff0c;整体来看无论是在 install 或是 build 阶段都提速了不少 &#x1f680;&#xff0c;借此时机&#xff0c;做个总结&#xff01;&…

TypeScript 中【类型断言】得使用方法

类型断言的概念 有些时候开发者比TS本身更清楚当前的类型是什么&#xff0c;可以使用断言&#xff08;as&#xff09;让类型更加精确和具体。 类型断言&#xff08;Type Assertion&#xff09;表示可以用来手动指定一个值的类型。 类型断言语法&#xff1a; 值 as 类型 或 <…

vue3 实现多层级列表

文章目录 需求背景解决效果index.vue视频效果 需求背景 需要在统一个列表下&#xff0c;实现商品和规格得管理和联动 解决效果 index.vue <!--/*** author: liuk* date: 2023/7/7* describe: 商品列表 */--> <template><div class"container">&…

textarea自适应高度二——(设置隐藏div获取高度和仿element-ui组件)

文章目录 前言一、通过隐藏div的方式来设置文本域自适应高度1. 新增一个文本域样式一个的dom&#xff0c;但是里面的textarea改为div2. 隐藏div的class3.设置文本域高度的方法 二、仿element-ui组件设置textarea自适应高度1.element-ui中自适应效果2. 看源码&#xff0c;盘逻辑…

病毒专题丨 plugx病毒

一、病毒简述 之前分析了一下&#xff0c;分析的较为简单&#xff0c;这次又详细分析了一下。 文件名称 00fbfaf36114d3ff9e2c43885341f1c02fade82b49d1cf451bc756d992c84b06 文件格式 RAR 文件类型(Magic) RAR archive data, v5 文件大小 157.74KB SHA256 00fbfaf36114d3ff9e…

【编程中的数学】:冰雹猜想

今天和大家分享一个令人着迷的数学谜题——冰雹猜想。这个谜题曾在1976年引起轰动&#xff0c;当时《华盛顿邮报》以头版头条刊登了一篇关于它的报道。让我们一起探索这个数学游戏的奥秘。 70年代中期&#xff0c;美国一所名牌大学的校园内兴起了一种数学游戏&#xff0c;这个游…

微信小程序使用vant时间选择器二次封装成自定义区间时间选择

目录 1.引入vant组件库 2.wxml页面 3.js页面 1.引入vant组件库 1.安装vant # 通过 npm 安装 npm i vant/weapp -S --production # 通过 yarn 安装 yarn add vant/weapp --production # 安装 0.x 版本 npm i vant-weapp -S --production 2.将 app.json 中的 "style&quo…

2-需求

目录 1.需求的定义 1.1.用户需求 1.2.软件需求 PS&#xff1a;软件需求规格说明书 2.为什么有需求&#xff1f; PS&#xff1a;为什么需求对软件测试人员如此重要&#xff1f; 3.测试人员眼里的需求 4.如何深入了解需求&#xff1f; 4.1.参加需求评审会议 4.2.查阅文…

数据结构初阶--二叉树OJ1

目录 二叉树的最大深度思路分析代码实现 相同的树思路分析代码实现 单值二叉树思路分析代码实现 二叉树的前序遍历思路分析代码实现 翻转二叉树思路分析代码实现 对称二叉树思路分析代码实现 另一棵树的子树思路分析代码实现 二叉树的最大深度 先来看题目描述 思路分析 题目…