单机案例
mac系统安装docker for mac即可,参考
启动mysql
mysql-rc.yaml
apiVersion: v1
kind: ReplicationController #副本启动器RC,kind表示资源对象类型
metadata:
name: mysql #RC的名称,全局唯一
spec:
replicas: 1 #pod副本期望数量
selector:
app: mysql #查询符合目标的pod标签
template: #定义pod副本实例模版
metadata:
labels:
app: mysql #pod副本标签,对应selector
spec:
containers: #pod内容器定义
- name: mysql #容器名称
image: mysql:5.7 #书中未注明版本,拉取最新的镜像latest会导致jdbc连接出错
ports:
- containerPort: 3306 #容器端口
env: #注入容器的环境变量
- name: MYSQL_ROOT_PASSWORD
value: "123456"
注意:针对apiVersion备注,Kubernetes平台采用了“核心+外围扩展”的设计思路,在保持平台核 心稳定的同时具备持续演进升级的优势。Kubernetes大部分常见的核心资源对象都归属于v1这个核心API。比如Node、Pod、Service、 Endpoints、Namespace、RC、PersistentV olume等。在1.9版本之后引入了apps/v1这个正式的扩展API组。
mysql-svc.yaml
apiVersion: v1
kind: Service #表明是k8s Service
metadata:
name: mysql #Service全局唯一名称
spec:
ports:
- port: 3306 #Service提供服务的端口
selector: #Service作用于符合标签的pod
app: mysql
Cluster IP是在Service创建后由Kubernetes系统自动分配的, 其他Pod无法预先知道某个Service的Cluster IP地址。因此存在一个服务发现机制,能根据Service的唯一名称,容器可以从环境变量中获取Service对应的Cluster IP地址和端口,从而发起TCP/IP连接请求。
myweb-rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: myweb
spec:
replicas: 2
selector:
app: myweb
template:
metadata:
labels:
app: myweb
spec:
containers:
- name: myweb
image: kubeguide/tomcat-app:v1
ports:
- containerPort: 8080
env:
- name: MYSQL_SERVICE_HOST
value: mysql
myweb-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: myweb
spec:
type: NodePort #连同nodePort表示Service开启了NodePort外网访问模式
ports:
- port: 8080 #容器内虚端口
nodePort: 30001 #外网访问端口
selector:
app: myweb
使用kubectl命令工具依次创建mysql-rc、mysql-svc、myweb-rc、myweb-svc
kubectl create -f xxx.yaml
分别执行查看rc、service、pod
kubectl get rc
kubectl get svc
kubectl get pod