kubernetes 1

29.1 认识kubernetes
29.2 从一个例子开始

29.1 认识kubernetes

kubernetes是一个管理容器的框架。kubernetes是一个开源系统,用于自动化容器化应用程序的部署,扩展和管理。 它也简称为k8s 官网 https://kubernetes.io/zh/

kubernetes中几个概念

  • container 容器 提供一个让应用运行的环境。
  • pod 在kubernetes中的一个运行单位,里面包含任意数量的容器。通常是两个。其中有一个叫Pause的容器,它作用网络栈和挂载卷。让用一个pod中的容器通讯更加高效。
  • replication controller(RC)提供一个管理任意数量pod的方法。它可以复制任意数量的pod模板。让kubernetes可以对pod进行扩容 升级
  • service 它是所有pod的整合成的服务环境 是kubernetes核心,其使用label标签来管理pods。
  • node 节点 可以是一台物理机,云主机,虚拟机也可以。通常一个node可以运行多个pod。从集群上看kubernetes分一个master节点和多个node节点。 master上运行着kubeapiserverkube-controller-managerkube-scheduler,它们实现了资源管理、pod调度、弹性伸缩、安全控制、系统监控、纠错等功能。Node是工作节点,运行应用程序,提供服务。Node上的最小单元是pod,Node上运行着kubernetesd的 kubeletkube-proxy服务进程,它们负责pod的创建、启动、监控、重启、销毁,以及实现负载均衡。

逻辑上

物理上


参考视频 https://www.bilibili.com/video/av10087636?from=search&seid=17893188254197971495

29.2 从一个例子开始

  • pod扩容和升级需要一个关键的东西,Replication controller(RC),RC需要包含3个关键信息:
    • 目标pod的定义
    • 目标pod需要运行的副本数量(replicas)
    • 要监控的目标pod的标签(Label)

工作过程:RC里定义好3个指标,kubernetes会根据RC定义的Label筛选出对应的pod,并实时监控其状态和数量,当实例数量 少于定义的副本数(replicas),则会根据RC定义的pod模版来创建新的pod,然后将此pod调度到合适的Node上启动并运行。 该过程完全自动化,无需人工干涉。

在单台机器上安装kubernetes 并安装管理mysql容器和webapp容器。

查看文章 https://www.cnblogs.com/neutronman/p/8047547.html

为了顺利安装kubernetes 先把系统升级到最新版本,并且让机器使用3G内存

[root@kun05 ~]# cat /etc/redhat-release ##查看当前系统版本
CentOS Linux release 7.4.1708 (Core)
[root@kun05 ~]# yum -y update ##升级所有软件和系统
[root@kun05 ~]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)

1.先关闭selinux和firewall
[root@kun05 ~]# systemctl stop firewalld
[root@kun05 ~]# systemctl disable firewalld
[root@kun05 ~]# setenforce 0

2.安装和etcdkubernetes (安装过程中会自动安装Docker软件)
[root@kun05 ~]# yum install -y etcd kubernetes

3.修改配置文件etcd是用来存储配置文件的数据库,这里用来存储k8s的配置文件,它也是分布式的
[root@kun05 ~]# vim /etc/sysconfig/docker

--selinux-enabled 改为 --selinux-enabled=false --insecure-registry gcr.io
--selinux-enabled=false --insecure-registry gcr.io

[root@kun05 ~]# vim /etc/kubernetes/apiserver
--admission_control参数中的ServiceAccount删除

4.配置docker加速器把--admission_control参数中的ServiceAccount删除
[root@kun05 ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://dhq9bx4f.mirror.aliyuncs.com"]
}

5.分别启动服务
[root@kun05 ~]# systemctl start etcd
[root@kun05 ~]# systemctl start docker
[root@kun05 ~]# systemctl start kube-apiserver
[root@kun05 ~]# systemctl start kube-controller-manager
[root@kun05 ~]# systemctl start kube-scheduler
[root@kun05 ~]# systemctl start kubelet
[root@kun05 ~]# systemctl start kube-proxy

也可以使用for循环启动
for s in etcd docker kube-apiserver kube-controller-manager kube-scheduler kubelet kube-proxy; do systemctl start $s; done

6.定义一个mysql的rc文件
[root@kun05 ~]# vim mysql-rc.yaml
apiVersion: v1
kind: ReplicationController #副本控制器RC
metadata:
name: mysql #RC的名称,全局唯一
spec:
replicas: 1 #Pod副本的期待数量
selector:
app: mysql #符合目标的Pod拥有此标签
template: #根据此模板创建Pod的副本(实例)
metadata:
labels:
app: mysql #Pod副本拥有的标签,对应RC的Selector
spec:
containers: #Pod内容器的定义部分
- name: mysql #容器的名称
image: hub.c.163.com/library/mysql #容器对应的Docker image
ports:
- containerPort: 3306 #容器应用监听的端口号
env: #注入容器内的环境变量
- name: MYSQL_ROOT_PASSWORD
value: "123456" #密码

7.发布rc到集群上
[root@kun05 ~]# kubectl create -f mysql-rc.yaml
此时k8s就是去下载对应的image并启动容器

查看刚刚创建rc的状态
[root@kun05 ~]# kubectl get rc
NAME DESIRED CURRENT READY AGE
mysql 1 1 0 2m

查看pod的创建情况
[root@kun05 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
mysql-32nvw 0/1 ContainerCreating 0 4m
Pod的状态处于ContainerCreating,需要等到状态为Runing才算成功

问题 创建rc中pod状态处于ContainerCreating卡死

[root@kun05 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
mysql-32nvw 0/1 ContainerCreating 0 4m
Error syncing pod 59950974-d84a-11e8-86ca-000c2971e1ca, skipping: failed to "StartContainer" for "POD" with ImagePullBackOff: "Back-off pulling image \"registry.access.redhat.com/rhel7/pod-infrastructure:latest\""

参考文档 
https://blog.csdn.net/d7185540/article/details/80868816
https://blog.csdn.net/gezilan/article/details/80011905

解决 缺少python-rhsm-certificates
[root@kun05 ~]# yum install python-rhsm-certificates
提示
软件包 python-rhsm-certificates-1.19.10-1.el7_4.x86_64 被已安装的 subscription-manager-rhsm-certificates-1.20.11-1.el7.centos.x86_64 取代
无须任何处理
[root@kun05 ~]# wget http://mirror.centos.org/centos/7/os/x86_64/Packages/python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm
[root@kun05 ~]# rpm2cpio python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm |cpio -iv --to-stdout ./etc/rhsm/ca/redhatuep.pem > /etc/rhsm/ca/redhat-uep.pem
[root@kun05 ~]# kubectl delete -f mysql-rc.yaml ##先删除刚才的rc再创建
[root@kun05 ~]# kubectl create -f mysql-rc.yaml
[root@kun05 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
mysql-x4rwx 1/1 Running 0 8m      #
Running表示已经启动为容器

8.定义一个mysql的svc/servce文件
[root@kun05 ~]# vim mysql-svc.yaml
apiVersion: v1
kind: Service #表明是K8s Service
metadata:
name: mysql #Service的全局唯一名称
spec:
ports:
- port: 3306 #Service提供服务的端口号
selector: #Service对应的Pod拥有这里定义的标签
app: mysql

9.发布service到集群上
[root@kun05 ~]# kubectl create -f mysql-svc.yaml
[root@kun05 ~]# kubectl get svc
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 10.254.0.1 <none> 443/TCP 52m
mysql 10.254.75.46 <none> 3306/TCP 2m

不同的service之间都是通过CLUSTER-IP来实现通讯的

10.定义一个webapp的rc文件并发布
[root@kun05 ~]# vim web-rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: myweb
spec:
replicas: 1
selector:
app: myweb
template:
metadata:
labels:
app: myweb
spec:
containers:
- name: myweb
image: docker.io/kubeguide/tomcat-app:v1
ports:
- containerPort: 8080
env:
- name: MYSQL_SERVICE_HOST
value: "10.254.75.46" #这里的IP需要通过kubect get svc 查看mysql的cluster ip
- name: MYSQL_SERVICE_PORT
value: "3306"
[root@kun05 ~]# kubectl create -f web-rc.yaml

11.定义一个webapp的svc文件并发布
[root@kun05 ~]# vim web-svc.yaml

apiVersion: v1
kind: Service
metadata:
name: myweb
spec:
type: NodePort
ports:
- port: 8080 ##容器的端口
nodePort: 30001 ##映射到物理机的端口
selector:
app: myweb

[root@kun05 ~]# kubectl create -f web-svc.yaml

[root@kun05 ~]# kubectl get svc
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 10.254.0.1 <none> 443/TCP 2h
mysql 10.254.75.46 <none> 3306/TCP 1h
myweb 10.254.156.235 <nodes> 8080:30001/TCP 18s

[root@kun05 ~]# iptables -P FORWARD ACCEPT
[root@kun05 ~]# curl http://192.168.80.105:30001 -I

12.使用curl和浏览器测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值