Bootstrap

k8s 二进制部署安装(三)

目录

部署Calico

Calico 工作原理

部署Calico

部署CoreDNS

负载均衡部署

部署dashboard


部署Calico

安装步骤来到 CNI 网络组件 ,在(二)中我们安装了flannel,现在我们要尝试安装另一网络组件Calico

calico 不使用隧道或NAT来实现转发,而是把Host 当作 Internet 中的路由器,使用BGP同步路由,并使用iptables来做安全访问策略,完成跨Host转发。

Calico 主要由三个部分组成:

Calico CNI插件:主要负责与kubernetes对接,供kubelet调用使用。

Felix:负责维护宿主机上的路由规则、FIB转发信息库等。

BIRD:负责分发路由规则,类似路由器。

Confd:配置管理组件。

Calico 工作原理

Calico 是通过路由表来维护每个 pod 的通信。Calico 的 CNI 插件会为每个容器设置一个 veth pair 设备, 然后把另一端接入到宿主机网络空间,由于没有网桥,CNI 插件还需要在宿主机上为每个容器的 veth pair 设备配置一条路由规则, 用于接收传入的 IP 包。 有了这样的 veth pair 设备以后,容器发出的 IP 包就会通过 veth pair 设备到达宿主机,然后宿主机根据路由规则的下一跳地址, 发送给正确的网关,然后到达目标宿主机,再到达目标容器。

部署Calico

在部署Calico之前,我们需要完全清除我们部署的flannel 

kubectl delete -f kube-flannel.yml

在 master01 节点上操作

上传 calico.yaml 文件到 /opt/k8s 目录中,部署 CNI 网络

或者下载calico.yaml文件

wget https://docs.projectcalico.org/v3.23/manifests/calico.yaml --no-check-certificate

sed -i 's#docker.io/##g' calico.yaml               移除docker.io/ 前缀

cd /opt/k8s

vim calico.yaml

#3878行,将 ip 改为10.244.0.0/16

应用calico.yaml

kubectl apply -f calico.yaml

我这里下面有unchanged是因为中间有一个报错

查看kube-system 命名空间下的所有正在运行的pod

kubectl get pods -n kube-system

部署CoreDNS

PS:CoreDNS可以为集群中的 service 资源创建一个域名 与 IP 的对应关系解析

在node 节点上操作

上传 coredns.tar 到/opt 目录种

cd /opt 

docker load -i coredns.tar

在 master01 上操作

上传 coredns.yaml 文件到 /opt/k8s 目录中,部署 CoreDNS

cd /opt/k8s

应用coredns

kubectl apply -f coredns.yaml

列出位于 kube-system 命名空间的所有pod

kubectl get pods -n kube-system

在master02 节点部署

(把 master01 节点上拷贝证书文件、各master组件的配置文件和服务管理文件到 master02 节点 ,暂且还在 master01 上操作)

scp -r /opt/etcd/ [email protected]:/opt/

scp -r /opt/kubernetes/ [email protected]:/opt

scp -r /root/.kube [email protected]:/root

scp /usr/lib/systemd/system/{kube-apiserver,kube-controller-manager,kube-scheduler}.service [email protected]:/usr/lib/systemd/system/

修改配置文件kube-apiserver中的IP

vim /opt/kubernetes/cfg/kube-apiserver

随后在master02 节点上启动各服务,并设置开机自启

systemctl start kube-apiserver.service

systemctl enable kube-apiserver.service

systemctl start kube-controller-manager.service

systemctl enable kube-controller-manager.service

systemctl start kube-scheduler.service

systemctl enable kube-scheduler.service

为master02 做软链接,方便使用和系统读取

ln -s /opt/kubernetes/bin/* /usr/local/bin/

在02 机器上查看节点状态

kubectl get nodes

负载均衡部署

配置load balancer集群双机热备负载均衡(nginx 负载均衡 keepalived 双机热备)

在 lb01 lb02 节点上操作

配置nginx 官方在线yum 源

cat > /etc/yum.repos.d/nginx.repo << 'EOF' [nginx] name=nginx repo baseurl=Index of /packages/centos/7/$basearch/ gpgcheck=0 EOF

yum install nginx -y

随后修改nginx配置文件,配置四层反向代理负载均衡,指定k8s群集2台master的节点ip和6443端口

vim /etc/nginx/nginx.conf

nginx -t     检查语法是否有误

启动nginx服务,并查看已监听6443端口

systemctl start nginx

systemctl enable nginx

接下来部署 keepalived 服务

yum install keepalived -y

修改 keepalived 主配置文件

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id NGINX_MASTER              #lb02   是NGINX_BACKUP
}

vrrp_script check_nginx {
    script "/etc/nginx/check_nginx.sh"                  # 添加nginx 健康检查脚本
}

vrrp_instance VI_1 {
    state MASTER          #lb02 是BACKUP
    interface eth33           # ens33
    virtual_router_id 51
    priority 100                   #lb02   90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.16.233.99         #虚拟ip

    }
track_script {
        check_nginx
    }

}
 

创建nginx状态检查脚本

vim /etc/nginx/check_nginx.sh

赋权

启动keepalived 服务

systemctl start keepalived

ip a 查看虚拟ip

在node 节点上操作

修改node节点上的bootstrap.kubeconfig,kubelet.kubeconfig配置文件为VIP

cd /opt/kubernetes/cfg/

vim bootstrap.kubeconfig

vim kubelet.kubeconfig

vim kube-proxy.kubeconfig

重启kubelet和kube-proxy服务

systemctl restart kubelet.service

systemctl restart kube-proxy.service

在lb01 上查看 nginx 和 node 、 master 节点的连接状态

netstat -natp | grep nginx

在master01节点上操作

测试创建pod

kubectl run nginx --image=nginx

//查看Pod的状态信息

kubectl get pods

kubectl get pods -o wide

在对应的node节点上 curl 访问

部署dashboard

在 master01 节点上操作

上传 recommended.yaml 文件到 /opt/k8s 目录中

cd /opt/k8s

vim recommended.yaml

kubectl apply -f recommended.yaml

创建service account并绑定默认cluster-admin管理员集群角色

kubectl create serviceaccount dashboard-admin -n kube-system

kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin

kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

这里会输出一个token

浏览器访问

https://172.16.233.104:30001

登录的时候输入token

到这里二进制部署安装就完成了

;