初识Kubernetes:(4)Kubernetes实战入门
- 1 前言
- 2 Namespace
- 2.1 概述
- 2.2 应用示例
- 3 Pod
- 3.1 概述
- 3.2 语法及应用示例
1 前言
介绍如何在kubernetes集群中部署一个Nginx服务,并且能够对其访问。
2 Namespace
2.1 概述
- Namespace是kubernetes系统中一种非常重要的资源,它的主要作用是用来实现多套系统的资源隔离或者多租户的资源隔离。
- 默认情况下,kubernetes集群中的所有Pod都是可以相互访问的。但是在实际中,可能不想让两个Pod之间进行互相的访问,那么此时就可以将两个Pod划分到不同的Namespace下。kubernetes通过将集群内部的资源分配到不同的Namespace中,可以形成逻辑上的“组”,以方便不同的组的资源进行隔离使用和管理。
- 可以通过kubernetes的授权机制,将不同的Namespace交给不同租户进行管理,这样就实现了多租户的资源隔离。此时还能结合kubernetes的资源配额机制,限定不同租户能占用的资源,例如CPU使用量、内存使用量等等,来实现租户可用资源的管理。
kubernetes在集群启动之后,会默认创建几个namespace。
kubectl get namespace
default:所有未指定的Namespace的对象都会被分配在default命名空间。
kube-node-lease:集群节点之间的心跳维护,v1.13开始引入。
kube-public:此命名空间的资源可以被所有人访问(包括未认证用户)。
kube-system:所有由kubernetes系统创建的资源都处于这个命名空间。
2.2 应用示例
- 示例:查看所有的命名空间
kubectl get namespace
kubectl get ns
- 示例:查看指定的命名空间
kubectl get namespace default
kubectl get ns default
- 示例:指定命名空间的输出格式
kubectl get ns default -o wide
kubectl get ns default -o json
kubectl get ns default -o yaml
- 示例:查看命名空间的详情
kubectl describe namespace default
kubectl describe ns default
- 示例:创建命名空间
kubectl create namespace dev
kubectl create ns dev
- 示例:删除命名空间
kubectl delete ns dev
- 示例:命令式对象配置
① 新建ns-dev.yaml:
apiVersion: v1
kind: Namespace
metadata:
name: dev
② 通过命令式对象配置进行创建和删除:
kubectl create -f ns-dev.yaml
kubectl delete -f ns-dev.yaml
3 Pod
3.1 概述
- Pod是kubernetes集群进行管理的最小单元,程序要运行必须部署在容器中,而容器必须存在于Pod中。
- Pod可以认为是容器的封装,一个Pod中可以存在一个或多个容器。
- kubernetes在集群启动之后,集群中的各个组件也是以Pod方式运行的,可以通过下面的命令查看:
kubectl get pods -n kube-system
3.2 语法及应用示例
语法:创建并运行Pod
kubectl run (Pod的名称) [参数]
# --image 指定Pod的镜像
# --port 指定端口
# --namespace 指定namespace
- 示例:在名称为dev的namespace下创建一个Nginx的Pod
kubectl run nginx --image=nginx:1.17.1 --port=80 --namespace=dev
Tips:新版kubectl run 启动pod形式,不会自动创建
deployment
控制器了,因此,在对该pod进行删除时,不会自动重建
- 语法: 查询所有Pod的基本信息
kubectl get pods [-n 命名空间的名称]
- 示例:查询名称为dev的namespace下的所有Pod的基本信息
kubectl get pods -n dev
- 语法:查看Pod的详细信息
kubectl describe pod pod的名称 [-n 命名空间名称]
- 示例:查看名称为dev的namespace下的Pod的名称为nginx的详细信息
kubectl describe pod nginx -n dev
- 语法:Pod的访问
# 获取Pod的IP
kubectl get pods [-n dev] -o wide
# 通过curl访问
curl ip:端口
- 示例:访问Nginx的Pod
kubectl get pods -n dev -o wide
curl 10.244.2.7:80
- 语法:删除指定的Pod
kubectl delete pod pod的名称 [-n 命名空间]
- 示例:删除Nginx的Pod
kubectl delete pod nginx -n dev
- 示例:命令式对象配置
① 新建pod-nginx.yaml:
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: dev
spec:
containers:
- image: nginx:1.17.1
imagePullPolicy: IfNotPresent
name: pod
ports:
- name: nginx-port
containerPort: 80
protocol: TCP
② 执行创建和删除命令:
kubectl create -f pod-nginx.yaml
kubectl delete -f pod-nginx.yaml