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
运行
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
查看对应的Replica Set
kubectl get rs
- 1
查看Pod
kubectl get pods
- 1
查看Pod的水平扩展过程
kubectl describe deployments
- 1
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