10.安装网络插件
kubernetes支持多种网络插件,比如flannel,calico,canal等等 任选一种即可 本次选用flannel
(下面操作只在master节点上执行即可,插件使用的是DaemonSet的控制器,它会在每个节点上都运
行)
#获取flannel配置文件 [root@master ~]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kubeflannel.yml #使用配置文件启动flannel [root@master ~]# kubectl apply -f kube-flannel.yml namespace/kube-flannel created clusterrole.rbac.authorization.k8s.io/flannel created clusterrolebinding.rbac.authorization.k8s.io/flannel created serviceaccount/flannel created configmap/kube-flannel-cfg created 资源管理 资源管理介绍 在Kubernetes中,所有的内容都抽象为资源,用户需要通过操作资源来管理Kubernetes。 daemonset.apps/kube-flannel-ds created #查看启动状态 node1 Ready <none> 19m v1.18.1 [root@master ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION master Ready master 83m v1.18.1 node Ready <none> 19m v1.18.1 node1 Ready <none> 19m v1.18.1 [root@master ~]# #STATUS(状态)就从NotReady(未准备就绪)变成Ready(准备就绪) #到这里kubernetes集群就准备就绪了
11.部署程序
#部署一个nginx程序 [root@master ~]# kubectl create deployment nginx --image=nginx deployment.apps/nginx created #暴漏端口 [root@master ~]# kubectl expose deployment nginx --port=80 --type=NodePort service/nginx exposed [root@master ~]# kubectl get pod -o wide #查看程序运行在哪个工作节点上面 看NODE的值 NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-f89759699-dphvr 1/1 Running 0 81s 10.244.2.7 node1 <none> <none> #查看暴漏的端口 [root@master ~]# kubectl get service -o wide NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 4h34m <none> nginx NodePort 10.101.178.129 <none> 80:30733/TCP 35s app=nginx #通过IP:端口访问查看是否运行成功 #如果出现以下界面就是运行成功
资源管理
资源管理介绍
在Kubernetes中,所有的内容都抽象为资源,用户需要通过操作资源来管理Kubernetes。
Kubernetes的本质上就是一个集群系统,用户可以在集群中部署各种服务,所谓的部署服务,就是在 Kubernetes集群中运行一个个的容器,并将指定的程序跑在容器里。 Kubernetes的最小管理单元是pod而不是容器,所以只能将容器放在pod中,而Kubernetes一般也不会 直接管理Pod,而是通过Pod控制器来管理pod的。 Pod可以提供服务之后,就要考虑如何访问Pod中的服务,Kubernetes提供了Service资源实现这个功 能。 当然,如果Pod中的程序数据需要持久化,Kubernetes还提供了各种的存储系统
学习kubernetes的核心,就是学习如何对集群上的Pod、Pod控制器、Service、存储等各种资源进行操作
YAML语言介绍
YAML是一个类似 XML、JSON 的标记性语言。它强调以数据为中心,并不是以标识语言为重点。因而
YAML本身的定义比较简单,号称"一种人性化的数据格式语言"。
#XML语法 <xiaole> <age>15</age> <address>anhui</address> </xiaole> #YAML语法 xiaole: age: 15 address: anhui
YAML的语法比较简单,主要有下面几个:
大小写敏感
使用缩进表示层级关系
缩进不允许使用tab,只允许空格( 低版本限制 )
缩进的空格数不重要,只要相同层级的元素左对齐即可
address: anhui'#'表示注释
YAML支持以下几种数据类型:
纯量:单个的、不可再分的值
对象:键值对的集合,又称为映射(mapping)/ 哈希(hash) / 字典(dictionary)
数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
# 纯量, 就是指的一个简单的值,字符串、布尔值、整数、浮点数、Null、时间、日期 # 1 布尔类型 c1: true (或者True) # 2 整型 c2: 234 # 3 浮点型 c3: 3.14 # 4 null类型 c4: ~ # 使用~表示null # 5 日期类型 c5: 2018-02-17 # 日期必须使用ISO 8601格式,即yyyy-MM-dd # 6 时间类型 c6: 2018-02-17T15:02:31+08:00 # 时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用 +代表时区 # 7 字符串类型 c7: heima # 简单写法,直接写值 , 如果字符串中间有特殊字符,必须使用双引号或者单引号包裹 c8: line1 line2 # 字符串过多的情况可以拆成多行,每一行会被转化成一个空格 # 对象 # 形式一(推荐): sz: age: 15 address: Beijing # 形式二(了解): sz: {age: 15,address: Beijing} # 数组 # 形式一(推荐): address: - 顺义 - 昌平 # 形式二(了解): address: [顺义,昌平]
小提示: 1 书写yaml切记: 后面要加一个空格 2 如果需要将多段yaml配置放在一个文件中,中间要使用---分隔 3 下面是一个yaml转json的网站,可以通过它验证yaml是否书写正确 https://www.json2yaml.com/convert-yaml-to-json
资源管理方式
命令式对象管理
(直接使用命令去操作kubernetes资源)
kubectl run nginx-pod --image=nginx --port=80
kubectl命令
kubectl是kubernetes集群的命令行工具,通过它能够对集群本身进行管理,并能够在集群上进行容器
化应用的安装部署,kubectl的命令语法如下:
kubectl [comand] [type] [name] [flags]
comand:指定要对资源执行的操作,例如create,get,delete
type:指定类型的资源类型 比如deployment,pod,service
name:指定资源的名称(大小写敏感)
flags:指定额外的可选参数
#查询所有pod [root@master ~]# kubectl get pod NAME READY STATUS RESTARTS AGE nginx-f89759699-dphvr 1/1 Running 3 4d5h nginx1-56db585f94-br4rr 1/1 Running 0 6s nginx2-669c86457c-bvw5x 0/1 ContainerCreating 0 3s #查询指定pod [root@master ~]# kubectl get pod nginx-f89759699-dphvr NAME READY STATUS RESTARTS AGE nginx-f89759699-dphvr 1/1 Running 3 4d5h #查询指定详细pod [root@master ~]# kubectl get pod nginx-f89759699-dphvr -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-f89759699-dphvr 1/1 Running 3 4d5h 10.244.2.10 node1 <none> <none> -o wide 是携带的参数 查看资源的详细信息包括资源所在ip等
资源类型
kubernetes中所有的内容都抽象为资源,可以通过下面的命令进行查看:
kubectl api-resources
经常使用的资源有下面这些:
操作
kubernetes允许对资源进行多种操作,可以通过--help查看详细的操作命令
kubectl --help
经常使用的操作有下面这些:
下面以一个namespace / pod的创建和删除演示一下命令的操作
#创建一个namespace [root@master ~]# kubectl create namespace xiaole namespace/xiaole created #获取所有namespace(命名空间) [root@master ~]# kubectl get namespace NAME STATUS AGE default Active 4d10h kube-flannel Active 4d8h kube-node-lease Active 4d10h kube-public Active 4d10h kube-system Active 4d10h xiaole Active 93s xiaole123 Active 10s #运行一个pod并namespace(指定命名空间) [root@master ~]# kubectl run pod --image=nginx -n xiaole pod/pod created #查询指定namespace(命名空间)下运行的pod [root@master ~]# kubectl get pod -n xiaole NAME READY STATUS RESTARTS AGE pod 1/1 Running 0 9m24s #删除namespace(命名空间) [root@master ~]# kubectl delete namespace xiaole namespace "xiaole" deleted #获取所有namespace(命名空间) [root@master ~]# kubectl get namespace NAME STATUS AGE default Active 4d10h kube-flannel Active 4d9h kube-node-lease Active 4d10h kube-public Active 4d10h kube-system Active 4d10h