k8s集群部署之环境搭建
一、k8s简介k8s是Kubernetes的简称,它是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。通过Kubernetes可以实现快速部署应用,快速扩展应用,无缝对接新的应用功能以及节省资源,优化硬件资源的使用。设计架构Kubernetes集群包含有节点代理kubelet和Master组件(APIs, scheduler, etcd),一切都基于分布式
一、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的部署
master | server4 | 172.20.10.4 |
---|---|---|
node1 | server2 | 172.20.10.2 |
node2 | server3 | 172.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
更多推荐
所有评论(0)