本节所讲内容
12.1 kuberctl 概述
12.1 kubec 创建和删除一个podl 概述
12.2 yaml 语法规则
12.4 kubectl create 加载yaml 文件生成deployment 设备资源
12.5 kubectl 其他常用命令和参数说明
12.6 使用kubectl 管理集群中deployment 资源和service 服务
12 。1 kuberctl 概述
kuberctl 是一个用于操作kubernetes 集群的命令接口,通过kuberctl 的各种命令可以实现
各种农功能
12 。1.1 kubernetes 实验环境:已经安装好kubernetes 集群平台
查看系统版本
[root@master ~]# kubectl version
Client Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.2", GitCommit:"269f928217957e7126dc87e6adfa82242bfe5b1e", GitTreeState:"clean", BuildDate:"2017-07-03T15:31:10Z", GoVersion:"go1.7.4", Compiler:"gc", P
2 查看当前集群构成
一主两从 的kubernetes 集群
类型 Hostname IP
Master/etcd master 192.168.24.68
Node node1 192.168.24.62
Node node2 192.168.24.63
[root@master ~]# kubectl get nodes
NAME STATUS AGE
node1 Ready 6h
node2 Ready 5h
12.2 kubernetes 创建和删除一个pod 香瓜操作
命令 说明
run 在集群上运行一个镜像
create 使用文件或者标准输入的方式创建一个pod
delete 使用文件或者标准输入以及资源名称或者标签选择器来删除某个资源
提前将 常用的docker 镜像中的镜像
docker.io-nginx.tar 和 .tar 基础镜像pod-infrastructrue.tar
上传到node1 和node2 上并导入镜像
1 )两个都要导入
scp docker.io-nginx.tar 192.168.24.63 :/root/
[root@node1 ~]# docker load -i docker.io-nginx.tar
[root@node2 ~]# docker load -i docker.io-nginx.tar
[root@node2 ~]# docker load -i pod 基础镜像
[root@node1 ~]# docker load -i pod 基础镜像
cec7521cdf36: Loading layer [==================================================>] 58.44 MB/58.44 MB
350d50e58b6c: Loading layer [==================================================>] 53.76 MB/53.76 MB
63c39cd4a775: Loading layer [==================================================>] 3.584 kB/3.584 kB
Loaded image: docker.io/nginx:latest
2 ) [root@node1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.24.1 0.0.0.0 UG 100 0 0 ens33
10.255.0.0 0.0.0.0 255.255.0.0 U 0 0 0 flannel0
10.255.28.0 0.0.0.0 255.255.255.0 U 0 0 0 docker0
192.168.24.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
查看网段
[root@node2 ~]# cat /run/flannel/subnet.env
FLANNEL_NETWORK=10.255.0.0/16
FLANNEL_SUBNET=10.255.97.1/24
FLANNEL_MTU=1472
FLANNEL_IPMASQ=false
[root@node2 ~]# cat /run/flannel/docker
DOCKER_OPT_BIP="--bip=10.255.97.1/24"
DOCKER_OPT_IPMASQ="--ip-masq=true"
DOCKER_OPT_MTU="--mtu=1472"
DOCKER_NETWORK_OPTIONS=" --bip=10.255.97.1/24 --ip-masq=true --mtu=1472"
kubectl 和docker run 一样,他能将一个镜像运行起来
12.2.2 kubectl run 语法
创建并运行一个或者多个容器镜像
创建一个deployment 或者job 来管理
语法 :
kubectl run NAME --image=image [--env="key=value"][--port=port] [--replicas=replicas]
开始启动pod
[root@master ~]# kubectl run nginx --image=docker.io-nginx:latest --replicas=1 --port=9000
deployment "nginx" created
注:使用docker.io/nginx 镜像 ,port = 暴露容器端口9000,设置副本数1
注: nginx 的docker 镜像,node1 和node2 会自动在docker。io 上下载,也可以改成字节的私有仓库 :
--image =192.168.24.68:5000/nginx:1.12
在node1 查看镜像
[root@node1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/nginx latest 9e7424e5dbae 2 years ago 108 MB
docker run之后,kubernetes 创建一个deployment
[root@master ~]# kubectl get deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
nginx 1 1 1 0 8m
生成的pod,kubernetes 将运行在pod 中以方便试试卷和网络共享和管理
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-4058103961-5xkzm 0/1 ContainerCreating 0 13m
pods 常见的状态
1 ContainerCreating 容器创建中
2 ImagePullBackOff 从后端把镜像拉取到本地时断开
注: 如果这里pod 没有正常运行,都是因为docker hub 没有连接上,导致镜像没有下载成功,这时,可以在node 节点上把相关镜像换成阿里云的
3 terminating 终止 删除pod 时的状态
[root@master ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
nginx-4058103961-5xkzm 0/1 ContainerCreating 0 34m <none> node2
4 使用kubectl delete 删除创建的对象
[root@master ~]# kubectl delete pod nginx-4058103961-5xkzm
pod "nginx-4058103961-5xkzm" deleted
可以看到刚刚生成的 nginx pod 正在结束(Terminating),随乊一个新的 nginx pod 正在创建,这
是正是 replicas 为 1 的作用,平台会一直保证有一个副本在运行
所以直接删除deployment
[root@master ~]# kubectl delete deployment nginx
deployment "nginx" deleted
找不到了
[root@master ~]# kubectl get pod #pod 也被删除了
No resources found.
12.3 YAML 语言 的设计目标,就是方便人类读写,它实质上市一种通用的数据串行化格式
12.3.1 yaml 语法规则
2.yaml 语法的基本法规则下面
1,大小敏感
2 ,使用缩进表示层级关系
3 缩进时不允许使用tab 键,只允许使用空格
4 缩进的空格数据不重要,只要相同层级的元素左层对齐即可
5 # 表示注释,从这个字符一直到行尾,斗殴会被解析器忽略
6 在yaml 里面,连续的项目 属组元素,集合元素, 通过减号 “-” 来表示,map 结构里面的键值对 (key/value) 用冒号 “:” 来分割
3 对象:键值对的集合,又称为映射,mapping 哈希 字典
数组 一组按次排序的值,又称为列, 列表
纯量 单个的,不可再分的值
4 对象的一组键值对,使用冒号结构表示
例1 : animal pets
animal: pets
Yaml : 也允许另一种写法,将所有键值对写成一个行内对象
例2 hash 对象中包括name 和foo
hash
name :Steve
foo :bar
或者 hash:{name:Steve,foo:bar}
5 属组
一组连接词开头的,构成一个属组
-Cat
-Dog
-Goldfish
转为 js 如下
{['cat','Dog','Goldfish']}
数据结构的子成员是一个属组,则可以在该项目下面缩进一个空格
6 复合结构
对象和属组可以结合使用,形成复合结构
例:编写BAT基本的信息bat.yaml 配置文件
bat :
website
baidu:http://www.baidu.com
qq:http://www.qq.com
ali :
-http:www.taobao.com
-http://www.tmall.com
ceo :
yanhongli: 李彦宏
huatenghua: 马化腾
yunma: 马云
7 纯量是最基本的,不可再分的值,如,字符串,布尔值看看,整数,浮点数,Null ,时间,日期
12.4 kubectl create 加载 yaml 文件生成deployment
使用kubectl run 在设定很复杂的需求是,需要非常长的一条语句,也很容易出错,也没法保存
所以更多场景会使用yaml 或者json 文件
生成mysql.yaml 的deployment 文件:
[root@master ~]# vim mysql-deployment.yaml
写入以下内容
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: mysql #deployment 的名称,全局唯一
spec:
replicas: 1 Pod 副本期待数量,1 表示只运行一个pod,里面一个容器
template: 根据此模板的副本
metadata:
labels: 符合目标的pod 拥有此标签,默认和name一样
name: mysql
spec:
containers: #pod 容器中的定义部分
- name: mysql
image: docker.io/mysql/mysql-server #容器对应的Docker Image 镜像
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3306 容器暴露的端口号
protocol: TCP
env: 容器注入到环境变量
- name: MYSQL_ROOT_PASSWORD 设置mysql root密码
value: "hello123"
上传mysql 服务器镜像到node1 和node2 上
导入镜像
[root@node1 ~]# docker load -i docker.io-mysql-mysql-server.tar
[root@node2 ~]# docker load -i docker.io-mysql-mysql-server.tar
查看镜像
[root@node1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/nginx latest 9e7424e5dbae 2 years ago 108 MB
docker.io/mysql/mysql-server latest a3ee341faefb 2 years ago 246 MB
12.4.2 使用mysql.yaml 创建和删除mysql 资源
[root@master ~]# kubectl create -f mysql-deployment.yaml
deployment "mysql" created
12 。4.3 使用get 参数查看pod 详细信息
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
mysql-2261771434-xh5c3 0/1 ContainerCreating 0 1m
[root@master ~]# kubectl get deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
mysql 1 1 1 0 3m
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
mysql-2261771434-xh5c3 0/1 ContainerCreating 0 4m
查看详细信息
[root@master ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
mysql-2261771434-xh5c3 0/1 ContainerCreating 0 6m <none> node2
[root@master ~]# kubectl get service
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 10.254.0.1 <none> 443/TCP 22h
详细信息
kubectl describe pod mysql
解决错误
安装 yum install -y
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpmrpm2cpio python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm|cpio-iv--to-stdout./etc/rhsm/ca/redhat-uep.pem|tee/etc/rhsm/ca/redhat-uep.pem
12.5.1 类似于docker logs