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

这篇具有很好参考价值的文章主要介绍了Kubernetes的介绍(组件、Pod)和 安装使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

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

Kubernetes的介绍(组件、Pod)和 安装使用,kubernetes,java,容器

上图解释:

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地址变动影响整个集群,导致整个集群异常

Kubernetes的介绍(组件、Pod)和 安装使用,kubernetes,java,容器

2、关闭selinux和firewalld

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

Kubernetes的介绍(组件、Pod)和 安装使用,kubernetes,java,容器
 

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

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

查看docker版本 docker --version 

Kubernetes的介绍(组件、Pod)和 安装使用,kubernetes,java,容器

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来查看系统系统性能

Kubernetes的介绍(组件、Pod)和 安装使用,kubernetes,java,容器

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

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

Kubernetes的介绍(组件、Pod)和 安装使用,kubernetes,java,容器

每台机器上的/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()

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

Kubernetes的介绍(组件、Pod)和 安装使用,kubernetes,java,容器

执行如下脚本

[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 集群处于不稳定或不安全的状态。因此,在使用该选项之前,请确保您了解可能存在的风险,并确认您知道如何处理和解决与特定预检错误相关的问题。

执行成功后产生如下所示Kubernetes的介绍(组件、Pod)和 安装使用,kubernetes,java,容器

如下所示(每台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 

添加成功后的图片:

Kubernetes的介绍(组件、Pod)和 安装使用,kubernetes,java,容器

在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博客

参考文档:(103条消息) 完全清理k8s以及网络插件_k8s删除calico_L-960的博客-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服务)功能了。文章来源地址https://www.toymoban.com/news/detail-530071.html

到了这里,关于Kubernetes的介绍(组件、Pod)和 安装使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Kubernetes在容器内获取Pod信息

    我们知道,每个 Pod 在被成功创建出来之后,都会被系统分配唯一的名字、IP 地址,并且处于某个 Namespace 中,那么我们如何在 Pod 的容器内获取 Pod 的这些重要信息呢?答案就是使用 Downward API。 Downward API 可以通过以下两种方式将 Pod 信息注入容器内部。 (1)环境变量:用于单

    2024年02月10日
    浏览(36)
  • 【云原生|Kubernetes】08-Pod中的Init容器

    Init 容器是一种特殊容器,在 Pod内的应用容器启动之前运行。Init 容器可以包括一些应用镜像中不存在的实用工具和安装脚本。 你可以在 Pod 的spec中与用来描述应用容器的 containers 数组平行的位置指定 Init 容器。 Init 容器的状态在 status.initContainerStatuses 字段中以容器状态数组

    2024年02月09日
    浏览(54)
  • kubernetes(k8s)为容器和 Pod 分配内存资源

    展示如何将内存请求(request)和内存限制(limit)分配给一个容器。 我们保障容器拥有它请求数量的内存,但不允许使用超过限制数量的内存。 创建新的命名空间 编辑yaml文件 配置文件的 args 部分提供了容器启动时的参数。 “–vm-bytes”, “150M” 参数告知容器尝试分配 15

    2024年02月15日
    浏览(58)
  • 45了解容器编排工具 Kubernetes 的基本概念和应用,包括 Pod、Service

    Kubernetes 是一种用于自动部署、扩展和管理容器化应用程序的开源容器编排工具。它可以轻松地管理和编排应用程序容器,确保它们在大规模的云环境中高效、可靠地运行。本教程将介绍 Kubernetes 的基本概念和应用,包括 Pod 和 Service。 Pod 是 Kubernetes 中最小的可部署对象,是

    2024年02月08日
    浏览(43)
  • Kubernetes中Pod的扩缩容介绍

    在实际生产系统中,我们经常会遇到某个服务需要扩容的场景,也可能会遇到由于资源紧张或者工作负载降低而需 要减少服务实例数量的场景。此时可以利用 Deployment/RC 的 Scale 机制来完成这些工作。 Kubernetes 对 Pod 的扩缩容操作提供了手动和自动两种模式,手动模式通过执行

    2024年02月07日
    浏览(49)
  • 【Kubernetes】k8s中容器之间、pod之间如何进行网络通信?

    首先来回顾一下Pod: Pod 是用于构建应用程序的最小可部署对象。单个 Pod 代表集群中正在运行的工作负载,并 封装一个或多个 Docker 容器、任何所需的存储以及唯一的 IP 地址 。 集群中每一个 Pod 都会获得自己的、 独一无二的 IP 地址。一个Pod里的一组容器共享相同的IP地址。

    2024年04月28日
    浏览(74)
  • 【云原生 | Kubernetes 系列】K8s 实战 如何给应用注入数据 II 将pod数据传递给容器

    在上一篇文章中,我们学习了针对容器设置启动时要执行的命令和参数、定义相互依赖的环境变量、为容器设置环境变量,三种设置方式,本篇文章,我们将继续学习数据的传递。 有两种方式可以将 Pod 和 Container 字段传递给运行中的容器: 环境变量 卷文件 这两种呈现 Pod

    2024年01月25日
    浏览(141)
  • Kubernetes系列-容器状态介绍

    目录 1. 概述 2. 状态定义 Kubernetes 会跟踪 Pod 中每个容器的状态,就像它跟踪 Pod 总体上的阶段一样。 可以使用容器生命周期回调 来在容器生命周期中的特定时间点触发事件。 一旦调度器将 Pod 分派给某个节点,kubelet 就通过 容器运行时 开始为 Pod 创建容器。 容器的状态有

    2024年02月14日
    浏览(35)
  • 云原生 黑马Kubernetes教程(K8S教程)笔记——第一章 kubernetes介绍——Master集群控制节点、Node工作负载节点、Pod控制单元

    参考文章:kubernetes介绍 本章节主要介绍应用程序在服务器上部署方式演变以及kubernetes的概念、组件和工作原理。 在部署应用程序的方式上,主要经历了三个时代: 传统部署:互联网早期,会直接将应用程序部署在物理机上 优点:简单,不需要其它技术的参与 缺点:不能为

    2024年02月04日
    浏览(57)
  • 热门的容器技术:Docker 和 Kubernetes 介绍

    目录 一、什么是容器技术 二、Docker 介绍 三、Kubernetes介绍 四、Docker 和 Kubernetes的区别 容器技术指的是一种操作系统级的虚拟化技术,用于将应用程序及其依赖项打包成一个独立的、可移植的运行环境,称为容器。容器技术通过隔离应用程序之间的运行环境,使得每个容器在

    2024年02月03日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包