kubernetes入门1:kubernetes+flannel+etcd环境搭建(通用安装)

系统:centos7
将以下内容添加至/etc/hosts
zdtest1  192.168.3.1/16  # master & node1
zdtest2  192.168.3.2/16  # master & node2

一、下载flannel、etcd、kubernetes
node

1. 下载最新版本的 flannel(全部的文件均放在/home/k8s目录下,master和node均需安装flannel)linux

wget https://github.com/coreos/flannel/releases/download/v0.5.4/flannel-0.5.4-linux-amd64.tar.gz
tar -zvxf flannel-0.5.4-linux-amd64.tar.gz
cd flannel-0.5.4
cp -rp flanneld /usr/local/bin/
cp -rp mk-docker-opts.sh /usr/local/bin/

2. 下载最新版本的etcdnginx

curl -L  https://github.com/coreos/etcd/releases/download/v2.2.1/etcd-v2.2.1-linux-amd64.tar.gz -o etcd-v2.2.1-linux-amd64.tar.gz
tar xzvf etcd-v2.2.1-linux-amd64.tar.gz
cd etcd-v2.2.1-linux-amd64
cp -rp etcd* /usr/local/bin/

3. 下载最新版本的kubernetesgit

wget https://github.com/kubernetes/kubernetes/releases/download/v1.0.6/kubernetes.tar.gz
cd /home/k8s/
tar -zvxf kubernetes.tar.gz
cd /home/k8s/kubernetes/server/
tar -zvxf kubernetes-server-linux-amd64.tar.gz
cd /home/k8s/kubernetes/server/kubernetes/server/bin/
cp -rp hyperkube /usr/local/bin/
cp -rp kube-apiserver /usr/local/bin/
cp -rp kube-controller-manager /usr/local/bin/
cp -rp kubectl /usr/local/bin/
cp -rp kubelet /usr/local/bin/
cp -rp kube-proxy /usr/local/bin/
cp -rp kubernetes /usr/local/bin/
cp -rp kube-scheduler /usr/local/bin/

将kubelet文件和kube-proxy文件复制至node服务器下的/usr/local/bin/目录
rsync -avzP /usr/local/bin/kubelet root@192.168.3.2:/usr/local/bin/
rsync -avzP /usr/local/bin/kube-proxy root@192.168.3.2:/usr/local/bin/

二、配置防火墙规则github

node1执行docker

iptables -I INPUT -s 192.168.3.2/24 -p tcp --dport 8080 -j ACCEPT
iptables -I INPUT -s 192.168.3.2/24 -p tcp --dport 4001 -j ACCEPT
iptables -I INPUT -s 192.168.3.2/24 -p tcp --dport 7001 -j ACCEPT
iptables -I INPUT -s 192.168.3.2/24 -p tcp --dport 8888 -j ACCEPT

node2执行centos

iptables -I INPUT -s 192.168.3.1/24 -p tcp --dport 10250 -j ACCEPT
iptables -I INPUT -s 192.168.3.1/24 -p udp --dport 8285 -j ACCEPT

三、启动etcd、flannel、dockerapi

启动master上的etcdbash

nohup etcd --listen-peer-urls http://0.0.0.0:7001 --data-dir=/var/lib/etcd \
--listen-client-urls http://0.0.0.0:4001 \ 
--advertise-client-urls http://zdtest1:4001 >> /var/log/etcd.log 2>&1 &

启动flannel服务器

mkdir -p /var/log/flanneld;
nohup flanneld --listen=0.0.0.0:8888 >> /var/log/flanneld/flanneld.log 2>&1 &
etcdctl set /coreos.com/network/config '{ "Network": "10.1.0.0/16" }'

node一、node2上执行:
mkdir -p /var/log/flanneld;
nohup flanneld -etcd-endpoints=http://zdtest1:4001 -remote=zdtest1:8888 >> /var/log/flanneld/flanenlnode.log 2>&1 &
source /run/flannel/subnet.env

wKioL1aZGc6SMhlBAAAZ6navqa8848.png

wKiom1aZGbCApZm6AAAcMAT_8-o184.png

启动docker(需先安装docker)

删掉docker0网卡后手动启动docker
ip a del 172.17.0.1/16 dev docker0
docker -d -H unix:///var/run/docker.sock >> /var/log/dockerd --bip=${FLANNEL_SUBNET} --mtu=${FLANNEL_MTU}; 
systemctl start docker.service;

wKiom1aZGhmCfonaAADDECtJtak997.png

四、启动kubernetes(此处的kubernetes是带验证模式,非无密码模式)

master上启动kube-apiserver、kuber-controller-manager、kube-scheduler(第一启动kube-apiserver时可能没有key和crt,去掉配置重启一次便可)

mkdir -p /var/log/kubernetes;

nohup kube-apiserver --logtostderr=true --v=0 --etcd_servers=http://zdtest1:4001 \
--address=0.0.0.0 --allow-privileged=true \
--service-cluster-ip-range=10.254.0.0/24 \
--tls-cert-file=/var/run/kubernetes/apiserver.crt \
--tls-private-key-file=/var/run/kubernetes/apiserver.key \
--admission_control=LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota >> /var/log/kubernetes/kube-apiserver.log 2>&1 &

nohup kube-controller-manager --logtostderr=true --master=http://zdtest1:8080 \
--v=0 --node-monitor-grace-period=10s --pod-eviction-timeout=10s \
--root-ca-file=/var/run/kubernetes/apiserver.crt \
--service_account_private_key_file=/var/run/kubernetes/apiserver.key \
>> /var/log/kubernetes/kube-controller-manager.log 2>&1 &

nohup kube-scheduler --logtostderr=true --v=0 --master=http://zdtest1:8080 >> /var/log/kubernetes/kube-scheduler.log 2>&1 &

wKiom1aZG2qRhogsAAA7qj0am40238.png

NamespaceLifecycle,NamespaceExists配置了的话会出现Namespace kube-system does not exist错误
(须要自行建立kube-system的namespace)

wKiom1aZG7qT9ZhFAAAVw5w9qVo038.png

五、启动node一、node2上的kubectl、kube-proxy

mkdir -p /var/log/kubernetes;

nohup kubelet --logtostderr=true --v=0 --api_servers=http://zdtest1:8080 --address=0.0.0.0 --allow_privileged=false \
--tls-cert-file=/var/run/kubernetes/kubelet.crt --tls-private-key-file=/var/run/kubernetes/kubelet.key \
--config=/etc/kubernetes/manifests/ \
--cluster_dns=10.254.0.120 --cluster_domain=zdtest.com > /var/log/kubernetes/kubelet.log 2>&1 &

nohup kube-proxy --logtostderr=true --v=0 --master=http://zdtest1:8080 > /var/log/kubernetes/kube-proxy.log 2>&1 &

wKiom1aZHGfRCZLQAAAetyMNHAg187.png

六、经过kubectl运行第一个pod

提早下载好nginx的p_w_picpath和pause的p_w_picpath,不然会报错(pause负责管理pod的网络等相关事务)
docker pull nginx;docker pull gcr.io/google_containers/pause:0.8.0
谷歌被墙了,能够经过×××或访问国内的docker镜像站点(如时速云、灵雀云等)下载下来更名
kubectl run my-nginx --p_w_picpath=nginx --replicas=2 --port=80

wKiom1aZHW7zdnYgAAAZZom-RFY100.png

kubectl get pods -o wide

wKioL1aZHa6jd6BSAAAbPUuL9fI920.png

分别得到两个容器的ip(kubectl exec pod名称 执行命令)
kubectl exec my-nginx-wlwpw ip a|grep 10.1

wKioL1aZHb-Bp1Y-AAAclTdB9kU346.png

七、容器之间的互访

masternode上均执行如下语句(10.1对应etcd中设置的值)

iptables -I FORWARD -s 10.1.0.0/16 -j ACCEPT

访问建立好的2个nginx容器。

wKiom1aZHfmQvBVeAAA1H_Bjtzo135.png

wKiom1aZHfnieTSOAAAhWPIqYcw290.png

相关文章
相关标签/搜索