来一个demo,提振下士气,来个根据权威指南《1.3 从一个简单的例子开始》
参考文章
1、安装mysql
1.1 创建mysql-rc.yaml文件
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 创建pod
// 创建
kubectl create -f mysql-rc.yaml
// 查看pod
kubectl get pods
// 问题排查
kubectl describe pod mysql-v5lq7
1.3 遇到的问题
kubectl get pods看到,镜像一直在创建中,没完了
用describe命令查看, 原因是node节点的kubelet无法拉pause镜像
解决办法: 在各个node人工执从国内镜像拉,然后再打tag,曲线救国呀, 参考此文章
docker pull mirrorgooglecontainers/pause:3.1
docker tag docker.io/mirrorgooglecontainers/pause:3.1 k8s.gcr.io/pause:3.1
1.4 问题思考
怎么修改node的仓库,让它去国内仓库获取pause容器?
2、创建mysql k8s service
2.1、创建mysql-svc.yaml文件
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
ports:
- port: 3306
selector:
app: mysql
2.2 创建service
kubectl create -f mysql-svc.yaml
2.3 查看
kubectl get svc
3、安装tomcat
3.1 创建myweb-rc.yaml
apiVersion: v1
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'
3.2 创建pod
kubectl create -f myweb-rc.yaml
3.3 创建myweb-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: myweb
spec:
type: NodePort
ports:
- port: 8080
nodePort: 30001
selector:
app: myweb
4、收成果
因为我是部署在阿里云, 所以要给几台ecs设置安全规则,放行30001端口,访问nodeIp:nodePort即可
--其实这个是在单机的demo,没有把两个容器放到同个pod中,最终是跑不起来的
5、问题
为什么是访问nodeIp而不是masterIP?
按理说不是有负载均衡的吗? 希望后面的章节可以解答我的疑问
网友评论