简单的示例

原文:http://blog.51cto.com/12730062/2059091
最近看了一下Kubernetes权威指南第二版,拿一个小例子来练习一下,主要熟悉一下yaml文件的语法格式。

一、关闭CentOS防火墙服务
[root@k8s ~]# systemctl disable firewalld
[root@k8s ~]# systemctl stop firewalld

二、安装etcd和Kubernetes软件
[root@k8s ~]# yum -y install etcd kubernetes

三、修改/etc/sysconfig/docker配置文件
OPTIONS='--selinux-enabled=false --insecure-registry gcr.io'

四、修改/etc/kubernetes/apiserver配置文件
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"

五、启动所有服务
[root@k8s ~]# systemctl start etcd
[root@k8s ~]# systemctl start docker
[root@k8s ~]# systemctl start kube-apiserver
[root@k8s ~]# systemctl start kube-controller-manager
[root@k8s ~]# systemctl start kube-scheduler
[root@k8s ~]# systemctl start kubelet
[root@k8s ~]# systemctl start kube-proxy

六、创建mysql-rc.yaml文件(RC)
apiVersion: v1
kind: ReplicationController #定义资源类型,代表这是一个副本控制器RC
metadata:
name: mysql #RC的名称,全局唯一
spec:
replicas: 1 #Pod副本期待数
selector:
app: mysql #Pod标签选择器,即监控和管理拥有这些标签的Pod实例
template: #根据此模板创建Pod副本
metadata:
labels:
app: mysql #Pod副本拥有的标签,对应RC的Selector
spec:
containers: #Pod内容器的定义部分

  • name: mysql #容器的名称
    image: mysql #容器对应的镜像
    ports:
    • containerPort: 3306 #容器暴露的端口号
      env: #注入到容器内的环境变量
    • name: MYSQL_ROOT_PASSWORD
      value: "123456"

七、创建RC
[root@k8s ~]# kubectl create -f mysql-rc.yaml 
replicationcontroller "mysql" created
[root@k8s ~]# kubectl get rc
NAME DESIRED CURRENT READY AGE
mysql 1 1 0 6s

八、查看Pod的创建情况
[root@k8s ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
mysql-hn49k 0/1 ContainerCreating 0 1m

注意:此处状态一直是"ContainerCreating",怎么办?我们查看一下pod的详细信息
[root@k8s ~]# kubectl describe pod mysql-hn49k
......
failed to "StartContainer" for "POD" with ImagePullBackOff: "Back-off pulling image \"registry.access.redhat.com/rhel7/pod-infrastructure:latest\""

17m 10s 7 {kubelet 127.0.0.1} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "POD" with ErrImagePull: "image pull failed for registry.access.redhat.com/rhel7/pod-infrastructure:latest, this may be because there are no credentials on this request. details: (open /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory)"

查看/etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt路径发现是一个链接文件,但是我本地没有/etc/rhsm/ca/redhat-uep.pem怎么办?下载一个试试
[root@k8s ~]# yum -y install rhsm
yum了一个rhsm后还不好使,这个错误真蛋疼,找百度吧。。。。看到一个博客,才意识到pod的是依赖pause根容器的,但是这个镜像的网站是国外的,需要VPN,太麻烦。那就使用一点简单的办法
[root@k8s ~]# docker pull docker.io/kubernetes/pause
[root@k8s ~]# docker tag docker.io/kubernetes/pause gcr.io/google_containers/pause-amd64:3.0
[root@k8s ~]# docker rmi -f docker.io/kubernetes/pause

接下来是激动的时刻,删除掉刚才由mysql-rc.yaml文件创建出来的pod后再重新创建
[root@k8s ~]# kubectl delete -f mysql-rc.yaml 
[root@k8s ~]# kubectl create -f mysql-rc.yaml 
查看一下
[root@k8s ~]# kubectl get rc
NAME DESIRED CURRENT READY AGE
mysql 1 1 1 5h
[root@k8s ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
mysql-fjbt0 1/1 Running 1 5h
没有问题,那就继续往下。。。。

九、定义一个与之关联的service文件(mysql-svc.yaml)
apiVersion: v1
kind: Service #声明这是一个Kubernetes service类型的文件
metadata:
name: mysql #Service的全局名称
spec:
ports:

  • port: 3306 #Service提供的端口号,虚端口
    selector: #哪些pod副本对应到本服务
    app: mysql

[root@k8s ~]# kubectl create -f mysql-svc.yaml 
service "mysql" created
[root@k8s ~]# kubectl get svc
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
mysql 10.254.69.219 <none> 3306/TCP 9s

十、定义tomcat服务的RC文件(myweb-rc.yaml)
kind: ReplicationController
metadata:
name: myweb
spec:
replicas: 5
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
      [root@k8s ~]# kubectl create -f myweb-rc.yaml
      [root@k8s ~]# kubectl get pods
      NAME READY STATUS RESTARTS AGE
      mysql-fjbt0 1/1 Running 1 5h
      myweb-cr3r3 1/1 Running 1 5h
      myweb-hnsxq 1/1 Running 1 5h
      myweb-l4g38 1/1 Running 1 5h
      myweb-l4lc2 1/1 Running 1 5h
      myweb-q5nts 1/1 Running 1 5h

创建Service文件(myweb-svc.yaml)
apiVersion: v1
kind: Service
metadata:
name: myweb
spec:
type: NodePort #表示此Service开启NodePort方式的外网访问模式
ports:

  • port: 8080
    nodePort: 30001 #集群之外可以通过30001端口访问myweb,对应到8080虚端口上
    selector:
    app: myweb

[root@k8s ~]# kubectl create -f myweb-svc.yaml 
service "myweb" created

[root@k8s ~]# kubectl get svc
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 10.254.0.1 <none> 443/TCP 6h
mysql 10.254.69.219 <none> 3306/TCP 9m
myweb 10.254.119.110 <nodes> 8080:30001/TCP 36s

至此,这个小程序就搭建完成了,我们可以通过curl测试一下
[root@k8s ~]# curl -I http://127.0.0.1:30001
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Date: Tue, 09 Jan 2018 08:33:02 GMT

因为也是自己在研究琢磨,有需要修改的地方大家多指出来,谢谢各位!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值