一、k8s简介

k8s是Kubernetes的简称,它是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。通过Kubernetes可以实现快速部署应用,快速扩展应用,无缝对接新的应用功能以及节省资源,优化硬件资源的使用。

设计架构

Kubernetes集群包含有节点代理kubelet和Master组件(APIs, scheduler, etcd),一
切都基于分布式的存储系统。默认情况下master节点不参与调度,master节点上运行着很多的核心进程:调度,控制管理器,API server,Auth基于角色的访问控制等。每个节点都运行一个kublet服务,是每个节点的管理器,接受master的管理,维护节点上所有的pod,pod中可以有多个容器,在k8s中是以pod为单位的。Kube-proxy维护网络,提供网络支持。
在这里插入图片描述核心组件
• 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:提供集群日志采集、存储与查询

二、k8s的部署

masterserver4172.20.10.4
node1server2172.20.10.2
node2server3172.20.10.3

步骤1:
关闭节点的selinux和iptables防火墙,如果在安装docker之后才关闭的iptables,需要重启docker来重新加载策略
步骤2:
所有节点部署docker引擎,安装下图中的rpm包
在这里插入图片描述更改内核参数

vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
sysctl --system

开启docker

systemctl enable docker
systemctl start docker

步骤3:
写daemon.json文件,更改cgroup的驱动为systemd,保证docker和k8s使用同样的驱动systemd

{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}

在这里插入图片描述更改之后重启docker

systemctl daemon-reload
systemctl restart docker

步骤4:
禁用swap分区并注释掉/etc/fstab文件中的swap定义:

swapoff -a

步骤5:
安装部署软件kubeadm,Kubelet以及Kubectl:
Kubeadm:用来初始化集群的指令
Kubelet:在集群中的每个节点上用来启动pod容器等
Kubectl:用来与集群通信的命令行工具

vim /etc/yum.repos.d/k8s.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
yum install -y kubelet kubeadm kubectl
systemctl enable --now kubelet

步骤6:
列出所需的镜像并拉取镜像

kubeadm config images list --image-repository registry.aliyuncs.com/google_containers
kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers

步骤7:
在master节点上初始化集群,配置kubectl,安装网络组件

kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository registry.aliyuncs.com/google_containers
useradd kubeadm
vim /etc/sudoers
kubeadm ALL=(ALL) NOPASSWD: ALL
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

配置kubectl命令补齐功能:

echo "source <(kubectl completion bash)" >> ~/.bashrc

安装flannel网络组件:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kubeflannel.yml

步骤8:
在node节点上进行节点扩容:

kubeadm join --token b3a32e.7cef20447b55261e 172.20.10.4:6443 --discoverytoken-ca-cert-hash0sha256:bc718df41fdceb0db6c5380c7e27c204589b41dcb5f9a3bc52c254b707377f2f

其中token是用来master端用来验证node节点的,sha256是node端连接master端的,token的有效时间默认为24小时,超时后若想连接新的node节点需要重新生成token

kubeadm token list  #列出现有的token
kubeadm create token  #生成一个token

步骤9:
Master查看状态
查看节点状态:

kubectl get node

在这里插入图片描述查看核心pod运行情况:

kubectl get pod -n kube-system

在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐