kubernetes之旅
k8s 架构
官方网站: https://kubernetes.io/

核心组件
- ETCD 分布式高性能键值数据库,存储整个集群的所有元数据
- Apiserver 集群的资源访问控制入口,提供restAPI 和安全访问控制
- scheduler: 调度器,负责将业务pod调度到合适的节点上
- controller manager : 控制器,确保集群 按照期望方式运行
- kubelet:运行在每个节点上主要是节点代理
- pod管理:kubelet 定期从所监听的数据源获取节点上pod的期望状态(运行的什么容器,运行的副本数,网络存储是如何配置的),并调用对应的容器平台接口达到这个状态
- pod健康检查:kubelet创建容器之后还要查看容器状态是否正常运行,如果容器运行状态错误,根据pod设置的重启策略进行处理
- 容器监控:kubelet会监控pod所在节点的资源使用情况,并向master报告,知道整个集群的所有节点的资源使用情况,对于pod的调度和正常运行都至关重要
- kubectl : 命令行工具对集群进行命令管理
- CNI 通用网络接口我们这里使用flannel插件作为集群的网络插件实现跨节点通信


集群安装部署

master ip本次为192.168.255.130 node1 节点 192.168.255.131 node2 节点192.168.255.132

安装前准备
1 修改主机名,并添加hosts解析
设置iptables
#iptables -P FORWARD ACCEPT
关闭swap
#swapoff -a
防止开机自动挂载swap
#sed -i '/swap/s/^(.*)$/#\1/g' /etc/fstab
关闭selinux 和防火墙
#sed -ri 's#(SELINUX=).*#\1disabled#' /etc/selinux/config
#setenforce 0
#systemctl disable firewalld && systemctl stop firewalld
修改内核参数
#cat << EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward=1
vm.max_map_count=262144
EOF
#modprobe br_netfilter
#sysctl -p /etc/sysctl.d/k8s.conf
yum 源配置
#curl -o /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#curl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#cat << EOF > /etc/yum.repos.d/kuberbetes.repo
[kubernetes]
name=kubernetes
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-pacage-jey.gpg
EOF
安装docker
查看docker 历史版本
#yum list docker-ce --showduplicates |sort -r
#yum install docker-ce -y 安装最新版本 注意这里dcoker版本要与后面kubeadm兼容
配置docker 加速器
#mkdir /etc/docker
#vim /etc/docker/daemon.json
{
"registry-mirrors": [
]
}
#systemctl daemon-reload
#systemctl enable docker
#systemctl start docker
部署kuberbnetes 集群
1 安装kubeadm , kubelet kubectl 所有节点上
#yum install kubelet-1.16.2 kubeadm-1.16.2 kubectl-1.16.2 --disableexcludes=kuberbetes -y
查看kubeadm版本
#kubeadm version
设置kubelet开机自启
#systemctl enable kubelet
#systemctl start kubelet
在master 执行获取初始化配置,然后修改配置
#kubeadm config print init-defaults > kubeadm.yaml
apiVersion: kubeadm.k8s.io/v1beta2 bootstrapTokens: groups: system:bootstrappers:kubeadm:default-node-token signing authentication effect: NoSchedule --- apiServer: timeoutForControlPlane: 4m0s apiVersion: kubeadm.k8s.io/v1beta2 certificatesDir: /etc/kubernetes/pki clusterName: kubernetes controllerManager: {} dns: type: CoreDNS etcd: local: dataDir: /var/lib/etcd imageRepository: registry.aliyuncs.com/google_containers #修改为阿里云的仓库 或k8s.gcr.io kind: ClusterConfiguration kubernetesVersion: v1.16.0 networking: dnsDomain: cluster.local podSubnet: 10.244.0.0/16 # pod 网段 flannel插件需要用到这个网段 serviceSubnet: 10.96.0.0/12 scheduler: {}
查看镜像列表:
#kubeadm config images list --config kubeadm.yam 显示将拉取的镜像
#kubeadm config images pull --config kubeadm.yaml 提前pull 到本地
如果 源不可用可以尝试dockerhub拉取

在master节点上做初始化安装操作
#kubeadm init --config kubeadm.yaml
注意docker 与kbeadm 版本要兼容:
yum install docker-ce-cli-18.09.9-3.el7 docker-ce-18.09.9-3.el7 -y

状态是notready 因为环没有安装网络插件

安装flannel插件
拉取flannel插件镜像
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
2021-12-29 for 循环