作者:潘吉祥


环境准备

1. centOS-7(虚拟机或物理机均可)

2. 关闭防火墙,更新源

systemctl disable firewalld    #禁用防火墙
systemctl stop firewalld       #关闭防火墙
yum update                     #更新yum源

3.安装etcd和kubernetes

etcd作为kubernetes的信息保存中心,相当于我们熟知的zookeeper。

这里的快速演示相当于将一台机器同时作为master和worker。

关于etcd和master以及worker等会再后面的kubernetes架构中详细说明,这里先做演示。

yum install -y etcd kubernetes

*注意:kubernetes会连带安装docker,如果你的机器之前安装过docker,建议卸载,即使在安装时添加参数跳过依赖,还是会出现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

为方便后续使用,这里给出简单的启动和关闭脚本:

vim k8sStart.sh
#!/bin/bash
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
---
vim k8sStop.sh
#!/bin/bash
systemctl stop etcd
systemctl stop docker
systemctl stop kube-apiserver
systemctl stop kube-controller-manager
systemctl stop kube-scheduler
systemctl stop kubelet
systemctl stop kube-proxy

同样,关于这些服务的详细作用我们后面在kubernetes架构中会讲到。

2.查看状态

systemctl status xxx   #查看某个服务的状态,比如:

3.编写pod和service配置文件,并创建pod和service。

官方不建议直接创建pod,我们通过RC(ReplicationController)来管理创建。

我们在 /usr/local/k8s下创建文件:

vim tomcat_rc.yaml

apiVersion: v1                    #版本
kind: ReplicationController        #类型RC
metadata:                        #元数据
  name: tomcat                    #RC名字
spec:                            #rc配置规则
  replicas: 2                    #容器副本数
  selector:                        #配合labels使用
    app: tomcat                    #选择标签为tomcat的pod
  template:                        #pod模板
    metadata:                    #元数据
      labels:
        app: tomcat            #标签
    spec:                        #pod详细定义
      containers:                #容器
        - name: tomcat            #容器名称
      image: tomcat: 8.0.18-jre8    #镜像名
      ports:
          - containerPort: 8080    #容器端口

kubectl create -f tomcat_rc.yaml    #通过RC创建pod

vimtomcat_svc.yaml

apiVersion: v1                #版本号
kind: Service                 #类型:service
metadata:                    #元数据
  name: tomcat                #service名称
spec:
  type: NodePort            #访问模式
  ports:
    - port: 8080           #映射的容器端口
      nodePort: 30000     #对外访问的端口
  selector:                  #通过标签选择pod容器
    app: tomcat

kubectl create -ftomcat_svc.yaml    #创建service,用于访问。

[root@localhost k8s]# kubectl create -f tomcat-rc.yaml 
replicationcontroller "tomcat" created
[root@localhost k8s]# kubectl create -f tomcat-svc.yaml 
service "tomcat" created

4.查看pod和service

kubectl get pods

[root@localhost k8s]# kubectl get pods
NAME           READY     STATUS    RESTARTS   AGE
tomcat-cxd5b   1/1       Running   0          1m
tomcat-tc6hx   1/1       Running   0          1m

kubectl get svc

[root@localhost k8s]# kubectl get svc
NAME         CLUSTER-IP     EXTERNAL-IP   PORT(S)     AGE
kubernetes   10.254.0.1     <none>        443/TCP          1d
tomcat      10.254.5.255   <nodes>       8080:30000/TCP   17m

注意

1. 在get pod的时候这里第一次是会出现No resources found,我们需要对kubectl的配置文件做一些修改:vim /etc/kubernetes/apiserver

找到KUBE_ADMISSION_CONTROL键值对,删除值中的“ServiceAccount”,保存退出即可。

2. 绝大多数情况会出现一直创建的现象:

[root@localhost k8s]# kubectl get pods
NAME           READY     STATUS              RESTARTS   AGE
tomcat-cxd5b   0/1       ContainerCreating   0          39s
tomcat-tc6hx   0/1       ContainerCreating   0          39s

这是在pull 镜像时候的安全验证出现了问题,你需要做以下的步骤:

a.yum install *rhsm* -y

b.

docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest

如果以上两步能够成功,则无需以下的步骤(笔者经验来看一般是不行的/捂脸)

c.搭建自己的私有仓库,并启动(我的私有仓库:192.168.1.20:5000)

d.

docker pull docker.io/tianyebj/pod-infrastructure 

e.

docker tag tianyebj/pod-infrastructure 192.168.1.20:5000/pod-infrastructure 

f.

 docker push 192.168.1.20:5000/pod-infrastructure  

g.vi /etc/kubernetes/kubelet 

# pod infrastructure container  将原来infrastructure container的拉取地址换为从自己的私有仓库拉取
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=192.168.1.20:5000/pod-infrastructure:latest"

之后重启所有的服务即可,稍等容器镜像(Tomcat)下载完毕,就可以看到是running状态,原理就是使用docker将镜像下载到本地,然后kubernetes访问本地仓库即可。

3 到此为止,我们可以试着访问我们的Tomcat容器:http://192.168.1.20:30000/,其实还是访问不成功,在搭建好的k8s集群内创建的容器,只能在其所在的节点上curl可访问,但是在其他任何主机上无法访问容器占用的端口。我们需要设置iptables,iptables -P FORWARD ACCEPT

至此,我们就可以通过kubernetes访问我们的Tomcat容器啦!你也赶紧试试吧!

有了直观的体验,在接下来将会较为详细地介绍kubernetes相关知识点,关注不迷路!


肉哥微信好友坑位限时开放啦!

福利来啦!扫码直接加肉哥微信,送你份学习资料和面试手册,一起来围观最新技术动态和职场经验,遇到困惑也可与我交流(情感除外)。一定要备注:开发方向+地点,如:Java+北京。

▲长按加肉哥微信,赶紧上车


【推荐阅读

原创 | k8s系列教程一:开篇

5分钟白嫖20个在线工具类网站

历史上最简单的一道Java面试题,但无人能通过

面试官:Thread.sleep(0) 有什么用?

别用Date了,Java8新特性之日期处理,现在学会也不迟!

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐