1、单节点组织架构:

代码实现:

实验环境的设置:
k8s资料包
master:14.0.0.10
node1:14.0.0.11  (有dokcer环境)
node2:14.0.0.13  (有dokcer环境)
所有节点:iptables -F
         setenforce 0

实验步骤:
在master:14.0.0.10上:
mkdir k8s
cd k8s
从k8s资料包中,将etcd-cert.sh(创建证书的脚本)  etcd.sh(创建服务的脚本)拖进来到k8s下

mkdir etcd-cert(证书群)
cd etcd-cert
从k8s资料包中,将文件夹etcd-cert里面的cfssl、cfssljson、cfssl-certinfo直接拖进来!!
mv * /usr/local/bin/
chmod +x /usr/local/bin/cfssl /usr/local/bin/cfssljson /usr/local/bin/cfssl-certinfo
1、定义ca证书:
cat > ca-config.json <<EOF
{
  "signing": {
    "default": {
      "expiry": "87600h"
    },
    "profiles": {
      "www": {
         "expiry": "87600h",
         "usages": [
            "signing",
            "key encipherment",
            "server auth",
            "client auth"     
        ]  
      } 
    }         
  }
}
EOF

2、实现证书签名:
cat > ca-csr.json <<EOF 
{   
    "CN": "etcd CA",
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "Beijing",
            "ST": "Beijing"
        }
    ]
}
EOF

cfssl gencert -initca ca-csr.json | cfssljson -bare ca -   “生成ca-key.pem  ca.pem证书!!!”
     注意: ls etcd-cert  >>>  有5个文件: 1、ca-config.json 、 2、ca.csr(生成证书的中间件) 、3、ca-csr.json 、4、ca-key.pem  、5、ca.pem

3、指定etcd三个节点之间的通信验证:
cat > server-csr.json <<EOF
{
    "CN": "etcd",
    "hosts": [
    "14.0.0.10",
    "14.0.0.11",
    "14.0.0.13"
    ],
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "BeiJing",
            "ST": "BeiJing"
        }
    ]
}
EOF

4、生成ETCD证书 server-key.pem   server.pem
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www server-csr.json | cfssljson -bare server
     注意:此时下面应该有9个文件

cd k8s    >> 
     将kubernetes-server-linux-amd64.tar.gz 、etcd-v3.3.10-linux-amd64.tar.gz 拖进来 ,此时目录下有:etcd-cert.sh、etcd.sh、etcd-cert和两个压缩包
tar zxvf etcd-v3.3.10-linux-amd64.tar.gz
mkdir /opt/etcd/{cfg,bin,ssl} -p         //cfg:配置文件,bin:命令文件,ssl:证书
mv etcd-v3.3.10-linux-amd64/etcd etcd-v3.3.10-linux-amd64/etcdctl /opt/etcd/bin/
cp etcd-cert/*.pem /opt/etcd/ssl/
bash etcd.sh etcd01 14.0.0.10 etcd02=https://14.0.0.11:2380,etcd03=https://14.0.0.13:2380    宣告群集名称
vim /opt/etcd/cfg/etcd ????
scp -r /opt/etcd/ root@14.0.0.11:/opt/
scp -r /opt/etcd/ root@14.0.0.13:/opt/
scp -r /usr/lib/systemd/system/etcd.service root@14.0.0.11:/usr/lib/systemd/system/
scp -r /usr/lib/systemd/system/etcd.service root@14.0.0.13:/usr/lib/systemd/system/
在node节点上:
ls /opt/     有三个文件夹:bin(etcd、etcdctl)、cfg(etcd)、ssl(4.pem)

在node01、02节点上:
vim /opt/etcd/cfg/etcd     修改IP地址!!!

#[Member]
ETCD_NAME="etcd02"      ******etcd03
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://14.0.0.11:2380"           ******14.0.0.13
ETCD_LISTEN_CLIENT_URLS="https://14.0.0.11:2379"        ******14.0.0.13

#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://14.0.0.11:2380"       ******14.0.0.13
ETCD_ADVERTISE_CLIENT_URLS="https://14.0.0.11:2379"                 ******14.0.0.13
ETCD_INITIAL_CLUSTER="etcd01=https://14.0.0.10:2380,etcd02=https://14.0.0.11:2380,etcd03=https://14.0.0.13:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"

systemctl start etcd
systemctl status etcd
检查:systemctl status etcd    "running" 既是成功!!
注意:在主节点的etcd-cert目录下检查群集状态!!!
[root@localhost etcd-cert]#/opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://14.0.0.10:2379,https://14.0.0.11:2379,https://14.00.13:2379" cluster-health
显示“cluster is healthy!“既是成功!!!

在主节点etcd-cert目录下做flannel网络配置:
/opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://14.0.0.10:2379,https://14.0.0.11:2379,https://14.0.0.13:2379" set /coreos.com/network/config '{ "Network": "172.17.0.0/16", "Backend": {"Type": "vxlan"}}'
在子节点cd /opt/etcd/ssl目录下检查:
/opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://14.0.0.10:2379,https://14.0.0.11:2379,https://14.0.0.13:2379" get /coreos.com/network/config
两次都有{ "Network": "172.17.0.0/16", "Backend": {"Type": "vxlan"}}显示,说明成功!!

在两个node节点上:
将资料包中的flannel-v0.10.0-linux-amd64.tar.gz拖进来!!
tar zxvf flannel-v0.10.0-linux-amd64.tar.gz    有3个文件出来!!
mkdir /opt/kubernetes/{cfg,bin,ssl} -p
mv mk-docker-opts.sh flanneld /opt/kubernetes/bin/

将资料包里面的 flannel.sh  拖进来!!!启动flannel
bash flannel.sh https://14.0.0.10:2379,https://14.0.0.11:2379,https://14.0.0.13:2379

配置docker连接flannel
vim /usr/lib/systemd/system/docker.service
13# for containers run by docker
14 EnvironmentFile=/run/flannel/subnet.env   添加
15 ExecStart=/usr/bin/dockerd $DOCKER_NETWORK_OPTIONS -H fd:// --containerd=/run/containerd/containerd.sock

cat /run/flannel/subnet.env    //说明:容器的网卡的号码

systemctl daemon-reload
systemctl restart docker
ifconfig  >> 会有一个”flannel.1: “网卡!!  docker0 对接 flannel.1

创建容器检查ip地址的正确性:
docker run -it centos:7 /bin/bash
yum install net-tools -y
ifconfig
在查出来的IP地址相互ping,看是否能够通??

flannel容器集群网络部署

  • Overlay Network:覆盖网络,在基础网络上叠加的一种虚拟化网络技术模式,该网络中的主机通过虚拟链路连接起来
  • VXLAN:将源数据包封装到UDP中,并使用基础网络的IP/MAC作为外层报文头进行封装,然后在以太网上进行传输,到达目的地后由隧道端点解封装并将数据发送给目标地址
  • Flannel:是Overlay网络的一种,也是将源数据包封装在另一种网络包里面进行路由转发和通信,目前已经支持UDP、VXLAN、AWS VPC和GCE路由等数据转发方式

在这里插入图片描述
在这里插入图片描述

------------------------------------部署master组件-----------------------------
1、生成api-server证书。在master节点的k8s目录下:
将master.zip拖进来
unzip master.zip
mkdir /opt/kubernetes/{cfg,bin,ssl} -p
mkdir k8s-cert
cd k8s-cert/      >>将k8s-cert.sh 拖进来
注意修改cat > server-csr.json <<EOF     >>里面的部分代码:IP地址群:2个master、1个飘逸地址、2个nginx反向代理master地址(负载均衡器)
bash k8s-cert.sh 
ls *.pem     >>会有8个、4组的证书:2个admin、2个ca、2个kube-proxy、2个server
cp ca*pem server*pem /opt/kubernetes/ssl/

cd ..            >>在k8s目录下将kubernetes-server-linux-amd64.tar.gz拖进来!!!
tar zxvf kubernetes-server-linux-amd64.tar.gz
cd /root/k8s/kubernetes/server/bin
cp kube-apiserver kubectl kube-controller-manager kube-scheduler /opt/kubernetes/bin/

head -c 16 /dev/urandom | od -An -t x | tr -d ' '      >>生成的码字xxxxxxxxx
vim /opt/kubernetes/cfg/token.csv                          >>添加下面的字段!!!!
xxxxxxxxxxxxxxxxxxx,kubelet-bootstrap,10001,"system:kubelet-bootstrap"

cd /root/k8s/
bash apiserver.sh 14.0.0.10 https://14.0.0.10,https://14.0.0.11:2379,https://14.0.0.13:2379
cat /opt/kubernetes/cfg/kube-apiserver        >>检查相关参数是否正常???
netstat -ntap | grep 6443        https           >>>这里就是一个坎,必须正确才能往后做
netstat -ntap | grep 8080        http
 ./scheduler.sh 127.0.0.1
chmod +x controller-manager.sh 
 ./controller-manager.sh 127.0.0.1
/opt/kubernetes/bin/kubectl get cs        >>查看master节点状态:必须都是健康状态!!!

------------------------------------node节点部署------------------------------------------
在master的bin目录下:
scp kubelet kube-proxy root@14.0.0.11:/opt/kubernetes/bin/
scp kubelet kube-proxy root@14.0.0.13:/opt/kubernetes/bin/

在两个node的~下:将node.zip拖进来
unzip node.zip 

在master的k8s目录下:
mkdir kubeconfig
cd kubeconfig/
mv kubeconfig.sh kubeconfig
vim kubeconfig      
  >> 删除前面8行,在17行修改: --token=6351d652249951f79c33acdab329e4c4 \  (前面生成的随机码)
vim /etc/profile
在末尾添加 export PATH=$PATH:/opt/kubernetes/bin/
source /etc/profile
kubectl get cs              >>检查群集的健康状态!!!
bash kubeconfig 14.0.0.10 /root/k8s/k8s-cert/
scp bootstrap.kubeconfig kube-proxy.kubeconfig root@14.0.0.11:/opt/kubernetes/cfg/
scp bootstrap.kubeconfig kube-proxy.kubeconfig root@14.0.0.13:/opt/kubernetes/cfg/
kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap

在node1的~下:
bash kubelet.sh 14.0.0.11
ps aux | grep kube

在master的kubeconfig目录下:
kubectl get csr      >>检查到node的请求,有个识别码用于下面!!
kubectl certificate approve +XXXXXXXXXXXXXXXX            >>给予建立的权限
kubectl get csr      >>Approved,Issued     既是成功!!
kubectl get node   >>有一个节点出现并是Ready状态!!
bash proxy.sh 14.0.0.11
systemctl status kube-proxy.service    >>running既是成功!!!

scp -r /opt/kubernetes/ root@14.0.0.13:/opt/
scp /usr/lib/systemd/system/{kubelet,kube-proxy}.service root@14.0.0.13:/usr/lib/systemd/system/

在node2的~下:
cd /opt/kubernetes/ssl/
rm -rf *
cd ../cfg
vim  kubelet
   --hostname-override=14.0.0.13 \
vim kubelet.config 
    address: 14.0.0.13
vim kube-proxy
    --hostname-override=14.0.0.13 \
systemctl start kubelet.service 
systemctl enable kubelet.service 
systemctl start kube-proxy.service 
systemctl enable kube-proxy.service 
kubectl get csr                 》》生成授权码
kubectl certificate approve +xxxxxxxxxxx(上面生成的授权码)
kubectl get node
全集里面的所有节点都是ready既是成功!!!!
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐