初识k8s

pod >>>pause容器 里有network volume共享
kubernetes  >>master(kube-apiserver,kube-controller-manager,kube-scheduler实现了整个集群的资源管理,pod调度,弹性伸缩,安全控制,系统纠错、监控等功能) node(工作节点 最小单元是pod)上面运行着 kubelet.kube-proxy服务进程 这些服务进程负责pod 的创建,启动,监控,重启,销毁 以实现软件模式的负载均衡器
IT 》》服务扩容和服务升级
只需要在service关联的replication controller(简称RC),则该service的扩容以至于后来的service升级等问题都迎刃而解
在一个RC定义文件中包括以下三个关键信息
1)目标pod的定义
2)pod需要运行的副本数量(Replicas)
3)要监控的目标pod的标签(Label)
在创建好Rc(系统将自动创建好pod)后,kubernetes会通过Rc中定义的Label筛选出对应的pod实例并实时监控其状态和数量,如果实例数量少于定义的副本数量,则根据RC中定义的pod模板来创建一个新的pod然后将此pod调度到合适的node上运行,直到pod的实例数量达到预定的目标,这个过程完全是自动化的,无需人工干预。有了RC服务的扩容就变成了一个纯粹的简单的数字游戏了,只要修改RC中的副本数量即可。后续的service升级也将通过修改Rc来自动化完成。
以将在第二章介绍的PHP+REDIS留言板应用为例,只要为php的留言板程序(frontend)创建一个有三个副本的RC+service,为Redis读写分离集群创建两个RC:写节点(Redis-master)
创建一个单副本RC+service,读节点(redies-slaver)创建一个有两个副本的Rc+service,就可以分分钟完成整个集群的搭建过程了。
二:为什么要用kubernetes
简单的例子、
table_>__tomcat(demo.jsp)_>mysqldatabase
需要启用两个容器:
webapp容器 (需要访问mysql容器)
mysql容器
环境的准备:
kubernetes的安装和相关镜像的下载
1)关闭Centos自带的防火墙服务
#systemctl disable firewalld
#systemctl stop firewalld
2)安装etcd和kubernetes软件(会自动安装Docker软件):
#yum install -y etcd kubernetes
3)安装好软件后,修改两个配置文件
@Docker配置文件为/etc/sysconfig/docker 其中OPEIONS的内容设置为
OPTIONS='--selinux-enable=false --insecure-registry gcr.io'
@kubernetes apiserver配置文件为/etc/kubernetes/apiserver 把--admission_control参数中的ServiceAccount删除
4)按顺序启动所有的服务
#systemctl start etcd
#systemctl start docker
#systemctl start kube-apiserver
#systemctll start kube-controller-mangae
#systemctl start kube-scheduler
#systemctl start kublet
#systemctll start kube-proxy
Kubernetes集群环境安装成功
Docker镜像的下载地址为https://hub.docker.com/u/kuberguide/
1.1启动mysql服务
首先为MYSQL服务创建一个RC定义文件:mysql-rc.yaml,下面给出了该文件的完整内容和解释
apiserver: v1
kind: ReplicationController 
metadata:
    name: mysql ==RC名称,全局唯一
spec:
    replicas: 1  ===期待的副本数量
    selector:
      app: mysql  ==符合目标的pod拥有此标签
    template:
        metadata:  ==符合此模板创建pod的副本(实例)
          labels:
            app: mysql  ==pod副本所拥有的的标签,对应RC的selector
     spec:
        containers:  ===pod内容器的定义部分
        - name: mysql ==容器的名称
          image:mysql  ==docker image
        ports:
        - containerPort:     3306 ==容器暴露的端口号
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "123456"
发布到kubernetes 在master节点执行
# kubectl create -f mysql-rc.yaml
replicationcontroller "mysql" created
查看刚才创建的RC
#kubectl get rc
NAME    DESIRE CURRENT AGE
MYSQL    1            1        7M
查看pod的创建情况时
#kubectl get pods
使用docker ps 指令查看正在运行的容器
docker ps | grep mysql
最后我们创建一个关联的MYSQL 文件 mysql-svc.yaml
apiserver: v1
kind: service     
metadata:
    name: mysql ==service全局唯一名称
spec:
        ports:
        - port: 3306 ==容器暴露的端口号
        selector:
            app: mysql     ====service 对应的pod拥有这里定义的service
发布到kubernetes 在master节点执行
# kubectl create -f mysql-svc.yaml
replicationcontroller "mysql" created
查看刚才创建的RC
#kubectl get svc
NAME        CLUSTER-IP    EXTERNAL-IP PORTS(S) AGE
.....
1.2    启用Tomcat应用上面我们定义和启动了MYSQL服务
@myweb-rc.yaml
kind: ReplicationController 
metadata:
    name: myweb ==RC名称,全局唯一
spec:
    replicas: 5  ===期待的副本数量
    selector:
      app: myweb  ==符合目标的pod拥有此标签
    template:
        metadata:  ==符合此模板创建pod的副本(实例)
          labels:
            app: myweb  ==pod副本所拥有的的标签,对应RC的selector
     spec:
        containers:  ===pod内容器的定义部分
        - name: myweb ==容器的名称
          image:kubeguide/tomcat-app:v1  ==docker image
        ports:
        - containerPort: 8080 ==容器暴露的端口号
        env:
        - name: MYSQL_SERVICE_HOST
          value: "mysql"
        - name: MYSQL_SERVICE_ROOT
          value: '3306'
    #kubctl create -f myweb-rc.yaml
    ......
    #kubectl get pods
    NAME         READY     STATUS  RESTARTS  AGE
    ......
创建对应service以下是完整的yaml定义文件(myweb-svc.yaml):
apiVersion:     v1
kind: Service
metadata:
    name: myweb
spec:
    type: NodePort  开启了nodePort方式的外网访问模式
    ports:
     - port: 8080
        nodePort:     30001
    selector:
      app: myweb
运行kubectl create命令进行创建
#kubectl create -f myweb-svc.yaml
.............
查看开启的服务
#kubectl get services
NAME-------
mysql----
myweb-----
kubernetes ------
第一个例子搭建完成

    

猜你喜欢

转载自blog.csdn.net/weixin_41752144/article/details/81147937
k8s