Kubernetes定义
Kubernetes 这个单词来自于希腊语,含义是舵手或领航员,K8S是它的缩写,用“8”字替代了“ubernete”这8个字符。
Kubernetes作用
Kubernetes的目标是让部署容器化的应用简单并且高效,Kubernetes提供了应用部署、规划、更新、维护等功能。
Kubernetes包含如下功能作用:
1.自动化运维平台
中小型企业,以及大型互联网公司,可以使用Kubernetes构建一套自动化运维平台,从而降本增效。
K8s + Docker 可以保持开发、测试、生产环境一致,而且部署一个新的环境, 只需要执行一些命令行即可比较方便。
2.服务编排
kubernetes 允许声明式配置,自动编排服务,存储自动挂载等等。
3.弹性扩缩容
如果是电商公司,比如:每当618,双11系统流量暴增, 需要使用更多的服务器来缓解流量的激增,但是当双十一结束之后,又需要减少集群来减少公司开销。
这就会涉及到横向扩展搭建集群, 而kubernetes 针对上述问题可以自动扩缩容,比如:当流量出现波动的时候, 会自动增加、减少集群的数量。
4.服务发现和负载均衡
提供service,ingress 的组件,实现服务发现和负载均衡。
Kubernetes架构
Kubernetes架构,如下图所示:
一个Kubernetes集群由两部分构成 :master节点和node节点,更加完整的Kubernetes架构,还可以看下图:
从上图可以看出Kubernetes组件由:Master主节点组件和Node工作节点组件组成,两种角色分别对应着控制节点和工作节点。
Kubernetes的核心组件部署在Master管理节点上,主要作用是作为Kubernetes的“大脑”,控制整个分布式集群的运转,Node节点作为“四肢”,执行Master的操作指令。
Kubernetes组件
Kubernetes组件由:Master主节点组件和Node工作节点组件组成,两种角色分别对应着控制节点和工作节点。
1.主节点的组件
主节点架构
master主节点架构,如下图黄框所示:
从上图左侧黄框的Kubernetes主节点可以看出,Master 节点由4个独立的组件组成。
1.API Server组件
API Server的主要负责整个集群通信的 API 服务,API Server是Kubernetes控制程序的前端,也是用户唯一可以直接进行交互的Kubernetes组件。
2.键值存储etcd组件
Etcd是一种K-V存储仓库,Etcd主要用于保存集群所有的网络配置和对象的状态信息。
3.Controller Manager组件
Controller Manager是Kubernetes的“大脑”,由一系列控制器组成,如下图所示:
Controller Manager主要用于:实现 Kubernetes 集群故障检测,监控整个集群的状态,以及恢复的自动化工作。
4.Scheduler组件
Scheduler是Kubernetes的调度器,Scheduler 是负责整个集群的资源调度的。
工作节点的组件
工作节点组件,如下图所示:
上图右侧的绿框就是Kubernetes工作节点,包含如下组件:
1.Kubelet
kubelet 是负责容器真正运行的核心组件,kubelet 是 Master 和 Node 之间的桥梁,接收 API Server 分配给它的任务并执行。
2.Container Runtime
Container Runtime基于gRPC协议,定义了RuntimeService和ImageService两个gRPC服务,分别用于管理容器运行和镜像。
3.Kube-proxy
kube-proxy 是为了解决外部网络能够访问集群中容器提供的应用服务而设计的,Proxy 运行在每个Node 上。
4.Pod
Pod是Kubernetes中一个抽象化概念,由一个或多个容器组合在一起得共享资源,如下图所示:
在Kubernetes中,Pod是调度的最小元素,没有它容器就不能成
Kubernetes安装使用
配置服务器环境
1.配置服务器主机名
# master节点 vi /etc/hostname 设置成 master # work 节点 vi /etc/hostname 设置成 k8swork1
2.关闭防火墙和selinux
sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config setenforce 0 systemctl stop firewalld systemctl disable firewalld
3.关闭swap分区
1)临时关闭
swapoff -a
2)永久关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab
4.修改内核参数设置
echo "net.bridge.bridge-nf-call-ip6tables = 1" >>/etc/sysctl.conf echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf sysctl -p
5.仓库配置
cd /etc/yum.repos.d/ mkdir bak mv *.repo bak
备份旧的配置,下载阿里云仓库,下载kubernetes yaml 文件
Docker下载安装
1.配置Docker源仓库
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2.安装docker
yum install -y docker
3.启动docker
service docker restart
Kubernetes下载安装
1.配置Kubernetes源仓库
cat < /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF
2.卸载旧版本
yum remove -y kubelet kubeadm kubectl
3.查看可以安装的版本
yum list kubelet --showduplicates | sort -r
4.安装kubelet、kubeadm、kubectl 指定版本
yum install -y kubelet-1.21.0 kubeadm-1.21.0 kubectl-1.21.0
5.开机启动kubelet
systemctl enable kubelet && systemctl start kubelet
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》