K8s安装

二、k8s单机demo

2019-06-11  本文已影响0人  yezide

来一个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?
按理说不是有负载均衡的吗? 希望后面的章节可以解答我的疑问

上一篇 下一篇

猜你喜欢

热点阅读