Centos 7 部署Kubernetes(K8S)集群
资源链接:https://pan.baidu.com/s/1-PT_QQAf7cTu_znX-S-r9Q 密码:33sr
转发:http://blog.51cto.com/lizhenliang/1983392
一、环境规划
操作系统:CentOS7.3_x64
kubernetes安装目录:/opt/kubernetes
版本说明:
Kubernetes:v1.9
Docker:18.06.0-ce
Etcd:3.2
角色 |
IP |
组件 |
master |
192.168.1.195 |
etcd kube-apiserver kube-controller-manager kube-scheduler |
node01 |
192.168.1.196 |
kube-proxy kubelet docker flannel |
node02 |
192.168.1.197 |
kube-proxy kubelet docker flannel |
二、安装Docker
在所有节点执行:
setenforce 0
iptables -F
iptables -t nat -F
iptables -I FORWARD -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT
iptables -I INPUT -s 192.168.0.0/24 -j ACCEPT
开启路由转发
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
echo 1 > /proc/sys/net/bridge/bridge-nf-call-ip6tables
在Node上安装Docker:
# 安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加Docker软件包源
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
# 更新yum包索引
yum makecache fast
# 安装Docker CE
yum install docker-ce
设置默认从中国镜像仓库中拉取:
# vi /etc/docker/daemon.json
{
"registry-mirrors": [ "https://registry.docker-cn.com"]
}
# systemctl start docker
# systemctl enable docker
测试:
# docker info
三、安装Etcd
2.1 下载二进制包
#yum install etcd –y
# vi /etc/etcd/etcd.conf
# systemctl start etcd
# systemctl enable etcd
四、部署Flannel网络
1)写入分配的子网段到etcd,供flanneld使用
# etcdctl -endpoint="http://192.168.1.195:2379" set /coreos.com/network/config '{ "Network": "172.17.0.0/16", "Backend": {"Type": "vxlan"}}'
2)下载二进制包
# wget https://github.com/coreos/flannel/releases/download/v0.9.1/flannel-v0.9.1-linux-amd64.tar.gz
# tar zxvf flannel-v0.9.1-linux-amd64.tar.gz
# mv flanneld mk-docker-opts.sh /usr/bin
3)配置Flannel
vi /etc/sysconfig/flanneld
FLANNEL_OPTIONS="--etcd-endpoints=http://192.168.1.195:2379 --ip-masq=true"
4)systemd管理Flannel
# vi /usr/lib/systemd/system/flanneld.service
[Unit]
Description=Flanneld overlay address etcd agent
After=network.target
After=network-online.target
Wants=network-online.target
Before=docker.service
[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/flanneld
ExecStart=/usr/bin/flanneld $FLANNEL_OPTIONS
ExecStartPost=/usr/bin/mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/subnet.env
Restart=on-failure
[Install]
WantedBy=multi-user.target
RequiredBy=docker.service
5)配置Docker启动指定子网段 (区别)
修改成如图:
6)启动
# systemctl daemon-reload
# systemctl start flanneld
# systemctl enable flanneld
# systemctl restart docker
五、获取Kubernetes二进制包
https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.9.md
这个二进制包里面包含了master和node的组件。
六、运行Master组件
解压准备好的包:unzip master.zip
# mkdir -p /opt/kubernetes/{bin,cfg}
# mv kube-apiserver kube-controller-manager kube-scheduler kubectl /opt/kubernetes/bin
# chmod +x /opt/kubernetes/bin/* && chmod +x *.sh
# ./apiserver.sh 192.168.1.195 http://127.0.0.1:2379
# ./scheduler.sh 127.0.0.1
# ./controller-manager.sh 127.0.0.1
# echo "export PATH=$PATH:/opt/kubernetes/bin" >> /etc/profile
# source /etc/profile
安装完之后验证一下
七、运行Node组件
解压准备好的包:unzip node.zip
# mkdir -p /opt/kubernetes/{bin,cfg}
# mv kubelet kube-proxy /opt/kubernetes/bin
# chmod +x /opt/kubernetes/bin/* && chmod +x *.sh
# mv *.kubeconfig /opt/kubernetes/cfg/
# ./kubelet.sh 192.168.1.196 10.10.10.2
# ./proxy.sh 192.168.1.196
本节点IP是本机eth0网卡IP地址。
八、查询集群状态
在Master执行查看集群节点:
# kubectl get node
查看组件状态:
# kubectl get cs
九、启动一个测试示例
启动一个Nginx副本示例:
# kubectl run nginx --image=nginx --replicas=3
pod正常运行后,创建Service:
# kubectl expose deployment nginx --port=88 --target-port=80 --type=NodePort
# kubectl get svc nginx
在Node节点访问:
curl <CLUSTER-IP>:PORT
十、部署Web UI
上传yaml文件
[root@master ~]# kubectl create -f kubernetes-dashboard.yaml
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构