https://blog.csdn.net/keysilence1/article/details/70239717

概念

名词

注:Node、Pod、Replication Controller和Service等都可以看作是一种“资源对象”,几乎所有的资源对象都可以通过Kubernetes提供的kubectl工具执行增、删、改、查等操作并将其保存在ectd中持久化存储。

优点

示例

环境准备

系统

安装Kubernetes

关闭防火墙(没安装防火墙就算了~)

systemctl disable firewalld
systemctl stop firewalld
  • 1
  • 2

安装etcd和Kubernetes软件(会自动安装Docker软件)

yum install -y etcd kubernetes
  • 1

启动所有服务

systemctl start etcd
systemctl start docker
systemctl start kube-apiserver
systemctl start kube-controller-manager
systemctl start kube-scheduler
systemctl start kubelet
systemctl start kube-proxy
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
ps aux | grep 服务名
  • 1

Replication Controller

镜像

下载地址
拉取
Tomcat镜像
Mysql镜像

构建Mysql RC定义文件(构建创建Pod的源文件)

命名
内容
apiVersion: v1
kind: ReplicationController
metadata:
name: mysql
spec:
replicas: 1
selector:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "123456"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
发布到Kubernetes集群
创建RC
kubectl create -f mysql-rc.yaml
  • 1
查看RC
kubectl get rc
  • 1
查看Pod
kubectl get pods
  • 1

构建Mysql Kubernetes Service定义文件

命名
内容
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
ports:
- port: 3306
selector:
app: mysql
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
创建
kubectl create -f mysql-svc.yaml
  • 1
查看SVC
kubectl get svc
  • 1

构建Tomcat RC定义文件

命名
内容
kind: ReplicationController
metadata:
name: myweb
spec:
# Pod的数量
replicas: 1
# spec.selector与spec.template.metadata.labels,这两个字段必须相同,否则下一步创建RC会失败。
selector:
app: myweb
template:
metadata:
labels:
app: myweb
# 容器组的定义
spec:
containers:
# 容器名称
- name: myweb
# 容器对应的镜像
image: kubeguide/tomcat-app:v1
ports:
# 在8080端口上启动容器进程,PodIP与容器端口组成Endpoint,代表着一个服务进程对外通信的地址
- containerPort: 8080
env:
#此处如果在未安装域名解析的情况下,会无法将mysql对应的IP解析到env环境变量中,因此先注释掉!
# - name: MYSQL_SERVICE_HOST
# value: 'mysql'
- name: MYSQL_SERVICE_PORT
value: '3306'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
发布到Kubernetes集群
创建RC
kubectl create -f myweb-rc.yaml
  • 1
查看RC
kubectl get rc
  • 1
查看Pod
kubectl get pods
  • 1

构建Tomcat Kubernetes Service定义文件

命名
内容
apiVersion: v1
kind: Service
metadata:
name: myweb
spec:
type: NodePort
ports:
- port: 8080
nodePort: 30001
selector:
app: myweb
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
创建
kubectl create -f myweb-svc.yaml
  • 1
查看SVC
kubectl get services
  • 1

运行

Kubernetes权威指南学习笔记(一)-LMLPHP

Deployment

构建Deployment定义文件

命名

内容

#与RC不同之处,版本配置不同
apiVersion: extensions/v1beta1
#与RC不同之处,Kind不同
kind: Deployment
metadata:
name: frontend
spec:
replicas: 1
selector:
matchLabels:
tier: frontend
matchExpressions:
- {key: tier, operator: In, values: [frontend]}
template:
metadata:
labels:
app: app-demo
tier: frontend
spec:
containers:
- name: tomcat-demo
image: tomcat
# 设置资源限额,CPU通常以千分之一的CPU配额为最小单位,用m来表示。通常一个容器的CPU配额被定义为100~300m,即占用0.1~0.3个CPU;
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

发布到Kubernetes集群

创建Deployment

kubectl create -f tomcat-deployment.yaml
  • 1

查看Deployment

kubectl get deployments
  • 1

Kubernetes权威指南学习笔记(一)-LMLPHP

查看对应的Replica Set

kubectl get rs
  • 1

Kubernetes权威指南学习笔记(一)-LMLPHP

查看Pod

kubectl get pods
  • 1

Kubernetes权威指南学习笔记(一)-LMLPHP

查看Pod的水平扩展过程

kubectl describe deployments
  • 1

Kubernetes权威指南学习笔记(一)-LMLPHP

HPA

构建HPA定义文件

命名

内容

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: php-apache
namespace: default
spec:
maxReplicas: 10
minReplicas: 1
scaleTargetRef:
kind: Deployment
name: php-apache
targetCPUUtilizationPercentage: 90
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

命令方式实现相同的功能

Service

构建Service定义文件

命名

内容

apiVersion: v1
kind: Service
metadata:
name: tomcat-service
spec:
# 服务如果想被外部调用,必须配置type
type: NodePort
ports:
- port: 8080
name: service-port
# 服务如果想被外部调用,必须配置nodePort
nodePort: 31002
- port: 8005
name: shutdown-port
selector:
tier: frontend
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

发布到Kubernetes集群

创建Servcie

kubectl create -f tomcat-service.yaml 
  • 1

查看Endpoint列表

kubectl get endpoints
  • 1

查看tomcat-service更多信息

命令
kubectl get svc tomcat-service -o yaml
  • 1
结果
apiVersion: v1
kind: Service
metadata:
creationTimestamp: 2017-04-21T15:47:43Z
name: tomcat-service
namespace: default
resourceVersion: "227916"
selfLink: /api/v1/namespaces/default/services/tomcat-service
uid: dbf15b30-26a9-11e7-b185-080027d589d3
spec:
# Kubernetes集群内部的地址,无法在集群外部使用这个地址
clusterIP: 10.254.2.210
ports:
# 服务的虚端口
- port: 8080
protocol: TCP
# 确定提供该服务的容器所暴露的端口号,默认与port相同
targetPort: 8080
selector:
tier: frontend
sessionAffinity: None
type: ClusterIP
status:
loadBalancer: {}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

补充命令

查看已存在的镜像

docker images
  • 1

删除某个已存在的镜像

docker rmi 镜像ID
  • 1

查看当前启动的镜像

docker ps
  • 1

命令行方式进入某个容器

docker exec -it 容器ID sh
  • 1

查看某个容器日志

docker logs 容器ID
  • 1

删除某个运行的容器

docker rm -f 容器ID
  • 1

yaml文件修改后应用

kubectl apply -f XXX.yaml
  • 1

重新启动基于yaml文件的应用

kubectl delete -f XXX.yaml
kubectl create -f XXX.yaml
  • 1
  • 2

查看集群中有多少Node

kubectl get nodes
  • 1

查看某个Node的详细信息

kubectl describe node 节点名
  • 1

动态修改副本数量

kubectl scale rc XXX --replicas=3
  • 1

查看RC的详细信息

kubectl describe rc 标签名或者选择器名
  • 1

通过RC修改Pod副本数量

kubectl replace -f rc.yaml

kubect edit replicationcontroller replicationcontroller名
  • 1
  • 2
  • 3

对RC使用滚动升级,来发布新功能或修复BUG

kubectl rolling-update replicationcontroller名 --image=镜像名
  • 1

滚动升级

kubectl rolling-update replicationcontroller名 -f XXX.yaml
05-27 04:36