k8s 二进制部署安装(三)

目录

部署Calico

[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/ root@172.16.233.102:/opt/

scp -r /opt/kubernetes/ root@172.16.233.102:/opt

scp -r /root/.kube root@172.16.233.102:/root

scp /usr/lib/systemd/system/{kube-apiserver,kube-controller-manager,kube-scheduler}.service root@172.16.233.102:/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 {

acassen@firewall.loc

failover@firewall.loc

sysadmin@firewall.loc

}

notification_email_from Alexandre.Cassen@firewall.loc

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

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

相关推荐
MetaverseMan9 小时前
k8s 查看 Secrets 的内容和详细信息
云原生·容器·kubernetes
Cao_XinYang10 小时前
k8s的配置和存储(ConfigMap、ConfigMap的热部署Secret、Hostpath、EmptyDir以及NFS的服务使用)
云原生·容器·kubernetes
bestcxx20 小时前
(二十四)、在 k8s 中部署自己的 jar 镜像(以 springcloud web 项目为例)
spring cloud·kubernetes·jar
確定饿的猫20 小时前
k8s 二进制部署安装(二)
云原生·容器·kubernetes
小森饭1 天前
Kubernetes运行大数据组件-运行hadoop
大数据·hadoop·kubernetes
颜淡慕潇1 天前
【K8S系列】Kubernetes LoadBalancer 类型的 Service 未分配 IP 地址排查步骤及命令执行结果分析
后端·网络协议·云原生·容器·kubernetes
BUG弄潮儿2 天前
k8s部署metallb实现service的LoadBalancer模式
云原生·容器·kubernetes
撸码到无法自拔2 天前
利用Kubernetes原生特性实现简单的灰度发布和蓝绿发布
云原生·容器·kubernetes
摇曳 *2 天前
Kubernetes:(二)K8Sv1.20二进制部署
运维·容器·kubernetes·1024程序员节