Kubernetes--初体验

通过简单使用深入Kubernetes

集群描述

​ 假如现在有一个由三台机器搭建而成的Kubernetes集群。三台机器等同于三个节点。在Kubernetes中有着两种角色master节点(即我们通常所认为的主节点)和node节点(从节点)

# 在任一一个节点上检查集群信息
kubectl get nodes

# 输出如下
NAME       STATUS     ROLES      AGE     VERSION
master     Ready      master     10m     v1.14.0
node01
node02

YAML文件

​ 在Kubernetes中,各种资源都是通过yaml文件来进行创建。比如,pod、rs、replicaset和deployment等。yaml的编写区分大小写。支持map/list的文件进行编写。

一个普通的yaml文件

apiVersion: v1               #  版本信息
kind: Pod                    #  当前要创建的资源类型,  Pod
metadata:         					 #  元数据
  name: nginx								 #  pod的名字
  labels:                    #  pod拥有的label  ->  app: nginx
    app: nginx
spec:												 #  与pod容器相关的详情定义
  containers:								 #  pod里面拥有一个container,也可配置多个
  - name: nginx							 #  container name===nginx
    image: nginx						 #  所用到的镜像  nginx
    ports:
    - containerPort: 80      #  配置container的端口为80

yaml文件解释说明

​ 编写yaml文件的时候要使用空格不要使用tab键。yaml中存在层级关系,左边对齐表示同一层级。

#  - “空格” name这种形式的写法表示数组。以上为例,container属性下有一个数组,数组中有 name image 和 ports
- name

深入了解Pod

​ 如果说操作docker的最小单元是容器,那么和kubernetes打交道涉及到最多的就是pod

创建一个pod

​ 在集群所在的服务器中(任意一个节点),创建一个yaml文件。名字可以自定义,不过一般遵循见名知意的原则。创建一个yaml文件,名字命名为 ngxin_pod.yaml,内容如下。

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  containers:
  - name: nginx-container
    image: nginx
    ports:
    - containerPort: 80

根据 nginx_pod.yaml 文件去创建 pod。以及相关操作。

kubectl apply/create -f nginx_pod.yaml

#  查看pod信息
kubectl get pods

#  pod详情信息
kubectl get pods -o wide

#  pod创建描述信息,例如可查看pod具体运行在那个节点上等详细信息。在对应节点上可查看pod所对应的正在运行的容器
kubectl describe pod podName

#  删除pod
kubectl delete -f nginx_pod.yaml

#  并且在集群内部任意一个节点上访问创建的pod,网络都是互通的。

ReplicationController(RC)

RC用来维护pod的数量,保证其在任意时刻都符合我们设定的预期值

​ 通过RC实现了集群中pod的高可用,减少了手工运维工作。

have a try

一个示例yaml文件

apiVersion: v1
kind: ReplicationController     #  kind类型选择为  ReplicationController
metadata:
  name: nginx
spec:
  replicas: 3                  #   指定副本数为 3
  selector:                    #   表示需要管理的pod的label,对应上面命名的 nginx
    app: nginx
  template:                    #   template表示创建  Pod的模板,用来定义Pod的相关信息
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80

​ 使用该yaml文件,将会创建三个pod。并且每一个pod都拥有一个app:nginxlabel,同时每个Pod中都运行了一个nginx容器。当其中一个pod无法正常运行,Controller Manager能够及时发现并根据RC的定义,去创建一个新的Pod。

​ 也可以在Pod正在运行的时候对Pod进行扩缩容

kubectl scale rc nginx --replicas=7

# 查看 rc
kubectl get rc

# 删除一个pod,验证rc功能
kubectl delete pods podName

ReplicationSet(RS)

​ 随着版本的更替,RC升级为另外一个概念:Replica Set。RS和RC的区别在于,RS支持基于集合的Label Selector。功能更为强大。

简单示例

apiVersion: extensions/v1beta1
kind: ReplicaSet
metadata:
  name: frontend
spec:
  matchLabels: 
    tier: frontend
  matchExpressions: 
    - {
    
    key:tier,operator: In,values: [frontend]}
  template:
  ...

​ 值得注意的是,一般不单独使用ES。而是使用更高的资源对象Deployment,从而形成一整套Pod的操作流程和编排机制。无需担心各种机制间的兼容问题。

Deployment

​ Deployment相对RS和RC来说是更高等级的资源类型。我们可以随时知道当前Pod的“部署”进度。

yaml示例

apiVersion: apps/v1
kind: Deployment               #  资源类型 Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3                  #  指定副本集数量
  selector:
    matchLabels:
      app: nginx
  template:                    #   创建pod模版
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80
#  查看  deployment
kubectl get deployment -o wide

#  更新镜像版本
kubectl set image deployment nginx-deployment nginx=nginx:1.9.1

Namespace

​ 在kubernetes中,Pod属于不同的Namespace。Namespace是一个逻辑上的概念。在创建Pod的时候可以给Pod指定Namespace

Kubernetes中有着默认的Namespace,名字为default。

#  获取   default  下的pods
kubectl get pods

#  获取指定Namespace下的 pods
kubectl get pods -n NamespaceName

#  获取所有的  Namespace
kubectl get ns

创建Namespace

apiVersion: v1
kind: Namespace
metadata:
name: mns

​ 创建一个资源,指定在 mns 下

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  namespace: mns
......

猜你喜欢

转载自blog.csdn.net/GoNewWay/article/details/109276152