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
上运行着kubeapiserver
、kube-controller-manager
、kube-scheduler
,它们实现了资源管理、pod调度、弹性伸缩、安全控制、系统监 控、纠错等功能。Node是工作节点,运行应用程序,提供服务。Node
上的最小单元是pod,Node上运行着kubernetesd的 kubelet
、kube-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内存1
2
3
4
5[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
1 | [root@kun05 ~]# systemctl stop firewalld |
2.安装和etcdkubernetes (安装过程中会自动安装Docker软件)
1 | [root@kun05 ~]# yum install -y etcd kubernetes |
etcd
是用来存储配置文件
的数据库,这里用来存储k8s的配置文件,它也是分布式的
3.修改配置文件
1 | [root@kun05 ~]# vim /etc/sysconfig/docker |
将--selinux-enabled
改为 --selinux-enabled=false --insecure-registry gcr.io
1
--selinux-enabled=false --insecure-registry gcr.io
1 | [root@kun05 ~]# vim /etc/kubernetes/apiserver |
把--admission_control
参数中的ServiceAccount
删除
4.配置docker加速器
1 | [root@kun05 ~]# vim /etc/docker/daemon.json |
5.分别启动服务
1 | [root@kun05 ~]# systemctl start etcd |
也可以使用for循环启动1
for s in etcd docker kube-apiserver kube-controller-manager kube-scheduler kubelet kube-proxy; do systemctl start $s; done
6.定义一个mysql的rc文件
1 | [root@kun05 ~]# vim mysql-rc.yaml |
7.发布rc到集群上
1 | [root@kun05 ~]# kubectl create -f mysql-rc.yaml |
查看刚刚创建rc的状态1
2
3[root@kun05 ~]# kubectl get rc
NAME DESIRED CURRENT READY AGE
mysql 1 1 0 2m
查看pod的创建情况1
2
3
4[root@kun05 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
mysql-32nvw 0/1 ContainerCreating 0 4m
Pod的状态处于ContainerCreating,需要等到状态为Runing才算成功
问题 创建rc中pod状态处于ContainerCreating卡死
1 | [root@kun05 ~]# kubectl get pod |
参考文档 https://blog.csdn.net/d7185540/article/details/80868816
https://blog.csdn.net/gezilan/article/details/80011905
解决 缺少python-rhsm-certificates1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16[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文件
1 | [root@kun05 ~]# vim mysql-svc.yaml |
9.发布service到集群上
1 | [root@kun05 ~]# kubectl create -f mysql-svc.yaml |
不同的service之间都是通过CLUSTER-IP来实现通讯的
10.定义一个webapp的rc文件并发布
1 | [root@kun05 ~]# vim web-rc.yaml |
11.定义一个webapp的svc文件并发布
1 | [root@kun05 ~]# vim web-svc.yaml |
12.使用curl和浏览器测试
1 | [root@kun05 ~]# iptables -P FORWARD ACCEPT |