目录
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服务)功能了。