手把手教你构建 Kubernetes 1.8 + Flannel 网络
Posted 51reboot运维开发
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了手把手教你构建 Kubernetes 1.8 + Flannel 网络相关的知识,希望对你有一定的参考价值。
环境说明
操作系统:CentOS7
Kubernetes版本:v1.8.4
Docker版本:v17.06-ce
Flannel 版本: flannel-v0.9.1
Ntp 服务器配置
时间同步很重要
[root@node1 ~]# yum install ntp-server -y [root@node1 ~]# systemctl start ntpd && systemctl enable ntpd # yum install ntpdate -y #重要:时间同步 (每个节点都要操作否则会有意想不到的惊喜) # echo “*/5 * * * * /usr/sbin/ntpdate 192.168.31.221 > /dev/null 2>&1 &” >>/etc/crontab # /usr/sbin/ntpdate 192.168.31.221 #手动同步一次
角色 | IP | 组件 |
---|---|---|
etcd | ||
maser | 192.168.31.221 | kube-apiserver |
kube-controller-manager | ||
kube-scheduler | ||
Flannel | ||
kubelet | ||
Node1 | 192.168.31.222 | kube-proxy |
docker | ||
Flannel | ||
kubelet | ||
Node2 | 192.168.31.223 | kube-proxy |
kubelet | ||
kubelet |
Flannel概述
Flannel实质上是一种“覆盖网络(overlay network)”,也就是将 TCP 数据包装在另一种网络包里面进行路由转发和通信,目前已经支持UDP、VxLAN、AWS VPC和GCE路由等数据转发方式。
一.安装docker
1.设置 yum 仓库
tee /etc/yum.repos.d/docker.repo <<-'EOF' [dockerrepo] name=Docker Repository baseurl=https://yum.dockerproject.org/repo/main/centos/7/ enabled=1 gpgcheck=1 gpgkey=https://yum.dockerproject.org/gpg EOF
2.执行安装
yum -y install docker-engine
3.设置开机启动
systemctl start docker && systemctl enable docker
4.添加 Docker Hub 国内镜像
如果没有此文件,则新建一个
vi /etc/docker/daemon.json { "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"] }
5.重启 docker
systemctl restart docker #重启docker
6.设置 hosts 及 hostname
[root@node1 ~]# vi /etc/hosts 192.168.31.221 node1 node1.example.com 192.168.31.222 node2 node2.example.com 192.168.31.223 node3 node3.example.com [root@node1 ~]# hostnamectl set-hostname node1.example.com [root@node2~]# hostnamectl set-hostname node2.example.com [root@node3 ~]# hostnamectl set-hostname node3.example.com
二.给 docker 配置 Flannel 网络
1.Master 节点 etcd 配置
Etcd 安装配置 (这里做的单节点 ETCD 只在 Master 节点安装)
[root@node1 ~]# yum install etcd -y [root@node1 ~]# vi /etc/default/etcd ETCD_DATA_DIR="/var/lib/etcd/default" ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379" ETCD_ADVERTISE_CLIENT_URLS=http://0.0.0.0:2379 [root@node1 ~]# sed -i 's/localhost/0.0.0.0/g' /etc/etcd/etcd.conf [root@node1 k8s]# systemctl start etcd && systemctl enable etcd
etcd 创建 Flannel 网络
[root@node1 ~]# etcdctl --endpoints http://192.168.31.221:2379 set /coreos.com/network/config '{"NetWork":"10.0.0.0/16"}'
2.安装 flannel 软件并设置 docker 参数
(其他 node 节点 flannel 网络也照着这样配置)
使用软件包: flannel-v0.9.1.tar.gz (分享完会附带资料)
[root@node1 ~]# tar -zxvf flannel-v0.9.1.tar.gz [root@node1 ~]# cd flannel-v0.9.1 [root@node1 flannel-v0.9.1]# cp flanneld mk-docker-opts.sh /usr/local/bin/ [root@node1 flannel-v0.9.1]# cd conf/ [root@node1 conf]# cp *.service /usr/lib/systemd/system #覆盖docker 的启动脚本 [root@node1 conf]# cp flanneld /etc/sysconfig/ [root@node1 conf]# vi /etc/sysconfig/flanneld #修改 自己的etcd 服务器地址 # Flanneld configuration options # etcd url location. Point this to the server where etcd runs FLANNEL_ETCD_ENDPOINTS="http://192.168.31.221:2379" # etcd config key. This is the configuration key that flannel queries # For address range assignment FLANNEL_ETCD_KEY="/coreos.com/network" FLANNEL_OPTIONS="--etcd-endpoints=http://192.168.31.221:2379 --ip-masq=true" # Any additional options that you want to pass #FLANNEL_OPTIONS=""
最后重启 flannel 和 docker
systemctl daemon-reload systemctl start flanneld && systemctl enable flanneld systemctl restart docker
成功状态
ifconfig docker0 |grep inet && ifconfig flannel0 |grep inet
三个节点 docker 网络都照这样配置
三.Kubernetes 集群配置
使用软件包:
kubernetes-v1.8.4.tar.gz
#软件包分发到各个节点上
1.Master 节点配置:
[root@node1 ~]# tar -zxvf kubernetes-v1.8.4.tar.gz [root@node1 ~]# mkdir -p /opt/kubernetes/{bin,cfg} #配置文件和二进制文件目录 [root@node1 ~]# cd kubernetes-v1.8.4/ [root@node1 kubernetes-v1.8.4]# tar -zxvf kubernetes-server-linux-amd64.tar.gz [root@node1 kubernetes-v1.8.4]# cd kubernetes/server/bin/ [root@node1 bin]# cp kube-apiserver kube-controller-manager kube-scheduler kubectl /opt/kubernetes/bin [root@node1 bin]# cd ../../../ [root@node1 kubernetes-v1.8.4]# ./apiserver.sh 192.168.31.221 http://192.168.31.221:2379 [root@node1 kubernetes-v1.8.4]# ./scheduler.sh 192.168.31.221 [root@node1 kubernetes-v1.8.4]# ./controller-manager.sh 192.168.31.221 [root@node1 kubernetes-v1.8.4]# echo "export PATH=$PATH:/opt/kubernetes/bin" >> /etc/profile [root@node1 kubernetes-v1.8.4]# source /etc/profile [root@node1 kubernetes-v1.8.4]# netstat -tunlp #查看服务是否启动
2.Node1 节点上配置
[root@node2 ~]# swapoff -a #禁止交换分区 [root@node2 ~]# mkdir -p /opt/kubernetes/{bin,cfg} [root@node2 ~]# tar -zxvf kubernetes-v1.8.4.tar.gz [root@node2 ~]# cd kubernetes-v1.8.4 [root@node2 kubernetes-v1.8.4]# tar -zxvf kubernetes-node-linux-amd64.tar.gz [root@node2 kubernetes-v1.8.4]# cd kubernetes/node/bin/ [root@node2 bin]# cp kubelet kube-proxy /opt/kubernetes/bin [root@node2 bin]# cd ../../../ [root@node2 kubernetes-v1.8.4]# ./kubelet.sh 192.168.31.221 192.168.31.222 10.10.10.2 [root@node2 kubernetes-v1.8.4]# ./proxy.sh 192.168.31.221 192.168.31.222 [root@node2 kubernetes-v1.8.4]# echo "export PATH=$PATH:/opt/kubernetes/bin" >> /etc/profile [root@node2 kubernetes-v1.8.4]# source /etc/profile
3.Node2 节点上配置
[root@node3 ~]# swapoff -a #禁止交换分区 [root@node3 ~]# mkdir -p /opt/kubernetes/{bin,cfg} [root@node3 ~]# tar -zxvf kubernetes-v1.8.4.tar.gz [root@node3 ~]# cd kubernetes-v1.8.4 [root@node3 kubernetes-v1.8.4]# tar -zxvf kubernetes-node-linux-amd64.tar.gz [root@node3 kubernetes-v1.8.4]# cd kubernetes/node/bin/ [root@node3 bin]# cp kubelet kube-proxy /opt/kubernetes/bin [root@node3 bin]# cd ../../../ [root@node3 kubernetes-v1.8.4]# ./kubelet.sh 192.168.31.221 192.168.31.223 10.10.10.2 [root@node3 kubernetes-v1.8.4]# ./proxy.sh 192.168.31.221 192.168.31.223 [root@node3 kubernetes-v1.8.4]# echo "export PATH=$PATH:/opt/kubernetes/bin" >> /etc/profile [root@node3 kubernetes-v1.8.4]# source /etc/profile
4.查看集群状态:
[root@node1 ~]# kubectl get node
5.集群管理
kubelet 在创建 pod 时会先下载一个 pause 镜像,这个镜像用于容器基础网络管理
每个 node 节点都要执行该操作(镜像如果下载不下来,我们全部分享完,会把完整资料也分享给大家):
docker pull registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0 docker tag registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0 gcr.io/google_containers/pause-amd64:3.0
导入镜像:
docker load -i pause-amd64.tar.gz
非常重要: 防火墙
iptables -P FORWARD ACCEPT
iptables-save
每个节点都要执行,否则通讯会有问题
测试集群网络是否正常通讯
[root@node1 ~]# cat busybox.yamlapiVersion: v1 kind: Pod metadata: name: busybox namespace: default spec: containers: - image: busybox command: - ping - "114.114.114.114" imagePullPolicy: IfNotPresent name: busybox restartPolicy: Always [root@node1 ~]# kubectl create -f busybox.yaml
测试每个节点是否能 ping 通 容器 ip,能 ping 通说明正常
6.服务发现 DNS
kubedns-deployment.yaml kubedns-svc.yaml
两个文件本文档会附带(如果dns相关镜像下载不下来,分享完会带示例)
三个镜像导入然后再创建即可,每个节点上都要导入
kubedns-deployment.yaml - --kube-master-url=http://192.168.31.221:8080 #改地址要改成自己的地址 [root@node1 ~]# kubectl create -f kubedns-svc.yaml [root@node1 ~]# kubectl create -f kubedns-deployment.yaml [root@node1 ~]# kubectl get pods --namespace=kube-system -l k8s-app=kube-dns
创建 nginx 服务进行测试
[root@node1 ~]# kubectl create -f nginx-service.yaml [root@node1 ~]# kubectl create -f nginx-deployment.yaml [root@node1 ~]# kubectl exec busybox -it nslookup nginx-service
[root@node1 ~]# kubectl get svc
7.kubernetes-dashboard
节点上导入该镜像
kubernetes-dashboard.yaml #创建darshboard实例 [root@node1 ~]# vi kubernetes-dashboard.yaml - --apiserver-host=http://192.168.31.221:8080 #改为自己的apiserver
[root@node1 ~]# kubectl create -f kubernetes-dashboard.yaml [root@node1 ~]# kubectl get pods --namespace=kube-system
[root@node1 ~]# kubectl get svc --namespace=kube-system
未完待续.......
明天继续给大家分享后续的操作步骤,分享完成后会把完整的详细的资料都给大家,谢谢大家一致以来的支持。
点击【阅读原文】即可跳转
以上是关于手把手教你构建 Kubernetes 1.8 + Flannel 网络的主要内容,如果未能解决你的问题,请参考以下文章
HarmonyOS - 手把手教你搭建Artifactory
手把手教你用 Flask,Docker 和 Kubernetes 部署Python机器学习模型(附代码)
2.还不会部署高可用的kubernetes集群?看我手把手教你使用二进制部署v1.23.6的K8S集群实践(下)