kubernetes(K8s)集群(一)——简介及部署
kubernetes(K8s)集群简介及部署1. kubernetes简介1.1 Kubernetes概述1.2 kubernetes设计架构1.3 kubernetes设计理念2. kubernetes部署2.1 准备工作1. kubernetes简介1.1 Kubernetes概述kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写。是一个开源的,用于管理...
kubernetes(K8s)集群(一)——简介及部署
1. kubernetes简介
1.1 Kubernetes概述
- kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。
- 在Docker作为高级容器引擎快速发展的同时,在Google内部,容器技术已经应用了很多年,,Borg系统运行管理着成千上万的容器应用。
- Kubernetes项目来源于Borg,可以说是集结了Borg设计思想的精华,并且吸收了Borg系统中的经验和教训。
- Kubernetes对计算资源进行了更高层次的抽象,通过将容器进行细致的组合,将最终的应用服务交给用户。
Kubernetes的好处:
- 隐藏资源管理和错误处理,用户仅需要关注应用的开发。
- 服务高可用、高可靠。
- 可将负载运行在由成千上万的机器联合而成的集群中。
1.2 kubernetes设计架构
Kubernetes集群包含有节点代理kubelet和Master组件(APls,scheduler,etc),一切都基于分布式的存储系统。
Kubernetes主要由以下几个核心组件组成:
- etcd:保存了整个集群的状态
- apiserver:提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制
- controller manager:负责维护集群的状态,比如故障检测、自动扩展、滚动更新等
- scheduler:负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上
- kubelet:负责维护容器的生命周期,同时也负责Volume (CVI)和网络(CNI)的管理
- Container runtime:负责镜像管理以及Pod和容器的真正运行(CRI)
- kube-proxy:负责为Service提供cluster内部的服务发现和负载均衡
除了核心组件,还有一些推荐的Add-ons:
- kube-dns:负责为整个集群提供DNS服务
- Ingress Controller:为服务提供外网入口
- Heapster:提供资源监控
- Dashboard:提供GUI
- Federation:提供跨可用区的集群
- Fluentd-elasticsearch:提供集群日志采集、存储与查询
1.3 kubernetes设计理念
Kubernetes设计理念和功能其实就是一个类似Linux的分层架构
- 核心层::Kubernetes最核心的功能,对外提供API构建高层的应用,对内提供插件式应用执行环境
- 应用层:部署(无状态应用、有状态应用、批处理任务、集群应用等)和路由(服务发现、DNS解析等)
- 管理层:系统度量(如基础设施、容器和网络的度量) ,自动化(如自动扩展、动态Provision等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy等)
- 接口层:kubectl命令行工具、客户端SDK以及集群联邦
- 生态系统:在接口层之上的庞大容器集群管理调度的生态系统,可以划分为两个范畴:
- Kubernetes外部:日志、监控、配置管理、Cl、CD、Workflow、Faas、OTS应用、ChatOps等
- Kubernetes内部:CRI、CNI、CVI、镜像仓库、Cloud Provider、集群自身的配置和管理等
2. kubernetes部署
2.1 准备工作
准备4台虚拟机,其中一台做为私有仓库,另外三台部署kubernetes集群
- 一个或者多个兼容 deb 或者 rpm 软件包的操作系统,比如 Ubuntu 或者 CentOS
- 每台机器 2 GB 以上的内存,内存不足时应用会受限制
- 主节点上 2 CPU 以上
- 集群里所有的机器有完全的网络连接,公有网络或者私有网络都可以
step1:做好所有节点的时间同步
可以将宿主机作为一个时间服务器
#在真机
yum install -y chrony
vim /etc/chrony.conf
systemctl enable --now chronyd
chronyc sources -v
配置虚拟机:
yum install -y chrony
vim /etc/chrony.conf
systemctl enable --now chronyd
chronyc sources -v
所有节点主机同理配置时间同步
step2:关闭所有节点的selinux和iptables防火墙,所有节点部署docker引擎
#每个节点做好解析
vim /etc/hosts
yum install -y docker-ce docker-ce-cli
2.2 安装 kubeadm
可以参照官方文档:https://kubernetes.io/zh/docs/setup/independent/create-cluster-kubeadm/
step1 安装需求:
- 一台或多台运行着下列系统的机器:
Ubuntu 16.04+
Debian 9+
CentOS 7
Red Hat Enterprise Linux (RHEL) 7
Fedora 25+
HypriotOS v1.0.1+
Container Linux (测试 1800.6.0 版本)- 每台机器 2 GB 或更多的 RAM (如果少于这个数字将会影响您应用的运行内存)
- 2 CPU 核或更多
- 集群中的所有机器的网络彼此均能相互连接(公网和内网都可以)
- 节点之中不可以有重复的主机名、MAC 地址或 product_uuid。
- 开启机器上的某些端口。
- 禁用交换分区。为了保证 kubelet 正常工作,您必须禁用交换分区
step2 所有节点主机进行配置:
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
systemctl enable docker
systemctl start docker
step3 安装 kubeadm、kubelet 和 kubectl
你需要在每台机器上安装以下的软件包:
- kubeadm:用来初始化集群的指令。
- kubelet:在集群中的每个节点上用来启动 pod 和容器等。
- kubectl:用来与集群通信的命令行工具。
kubeadm 不能 帮您安装或者管理 kubelet 或 kubectl,所以您需要确保它们与通过 kubeadm 安装的控制平面的版本相匹配。 如果不这样做,则存在发生版本偏差的风险,可能会导致一些预料之外的错误和问题。 然而,控制平面与 kubelet 间的相差一个次要版本不一致是支持的,但 kubelet 的版本不可以超过 API 服务器的版本。 例如,1.7.0 版本的 kubelet 可以完全兼容 1.8.0 版本的 API 服务器,反之则不可以。
#在server2
cd /etc/docker/
vim daemon.json
#配置yum源
cd /etc/yum.repos.d/
vim k8s.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
#下载
yum repolist
yum install -y kubelet kubeadm kubectl
scp k8s.repo server3:/etc/yum.repos.d/
scp k8s.repo server4:/etc/yum.repos.d/
#做免密处理
ssh-keygen
ssh-copy-id server3
ssh-copy-id server4
#在server3和server4上安装
yum install -y kubelet kubeadm kubectl
step4 在控制平面节点上配置 kubelet 使用的 cgroup 驱动程序
可以访问官网参考:https://kubernetes.io/docs/setup/production-environment/container-runtimes/#docker
#在server2上
cd /etc/docker/
vim daemon.json
{
"registry-mirrors": ["https://reg.westos.org"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
systemctl daemon-reload
systemctl restart docker
scp daemon.json server3:/etc/docker/
scp daemon.json server4:/etc/docker/
#在server3和server4上
systemctl daemon-reload
systemctl restart docker
docker info
step5 设置开机自启
#在所有节点
systemctl enable --now kubelet
step6 禁用swap分区
#所有节点
swapoff -a
vim /etc/fstab
注释掉swap定义
2.3 部署kubernetes集群
step1 拉取镜像
kubeadm config print init-defaults #查看默认配置信息
默认从k8s.gcr.io上下载组件镜像,需要科学上网才可以,所以需要修改镜像仓库:
#列出所需镜像
kubeadm config images list --image-repository registry.aliyuncs.com/google_containers
#拉取镜像
kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers
step2 初始化集群
kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository registry.aliyuncs.com/google_containers
--pod-network-cidr=10.244.0.0/16
:使用flannel网络组件时必须添加
--kubernetes-version
:指定k8s安装版本
kubeadm token list
#在server3和server4上节点扩容
kubeadm join 172.25.1.2:6443 --token f4u9ir.gwq06yhhjptjqlyf \
--discovery-token-ca-cert-hash sha256:55947bba225e0e240d4016b82412e897524a59b425654a0df5e0947835ebff8e
step3 配置kubectl
useradd kubeadm
visudo
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl get nodes
kubectl get pod -n kube-system
step4 配置kubectl 命令补齐功能
echo "source <(kubectl completion bash)">> ~/.bashrc
source .bashrc
step5 安装flannel网络组件
Master查看状态:
kubectl get cs
kubectl get node
kubectl get pod-n kube-system
安装flannel网络组件:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml
kubectl get pod -n kube-system -o wide
到此,一个三节点的K8s集群就部署完成了。
kubectl命令指南可以访问官网查看:
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands
更多推荐
所有评论(0)