centos8.1 arm64安装k8s+calico v3.17.1 +切换三种网络模式制定网络策略

本文档详细介绍了在CentOS8.1环境下,如何搭建Kubernetes v1.19.0集群,并使用Calico v3.17.1作为网络插件进行网络策略配置。步骤包括添加阿里云源,关闭防火墙和swap,配置内核参数,安装docker和k8s组件,初始化集群,节点加入集群,以及安装和配置Calico网络。此外,还提到了calicoctl管理工具的安装和使用。
摘要由CSDN通过智能技术生成

k8s+calico v3.17.1 部署切换三种网络模式制定网络策略

环境准备

centos8.1 arm64 x3台
calico v3.17.1
k8s v1.19.0
docker 19.3.14
在这里插入图片描述

部署准备工作(所有节点都要操作)

  1. 添加阿里云yum源(所有主机上操作)

root@centos-master ~# rm -rfv /etc/yum.repos.d/*
root@centos-master ~# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo

  1. 节点环境准备(所有主机上操作)

root@centos-master ~# systemctl stop firewalld.service
root@centos-master ~# systemctl disable firewalld.service

(1) 修改主机名

root@centos-master ~# vim /etc/hostname
在这里插入图片描述
其他节点都要添加一下内容
在这里插入图片描述

(2) 关闭防火墙

root@centos-master ~# systemctl stop firewalld && systemctl disable firewalld

(3) 关闭swap空间

root@centos-master ~# swapoff -a #临时关闭
root@centos-master ~# vim /etc/fstab #永久关闭
在这里插入图片描述

(4) 配置内核参数,将桥接的IPv4流量传递到iptables的链(所有主机上操作)

root@centos-master ~# cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
root@centos-master ~# sysctl --system

(5) 安装常用包(所有主机上操作)

root@centos-master ~#yum -y install vim-enhanced wget curl net-tools conntrack-tools bind-utils socat ipvsadm ipset

(6) 安装docker-ce(所有主机上操作)

root@centos-master ~# yum install -y yum-utils device-mapper-persistent-data lvm2 tc
root@centos-master ~# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
root@centos-master ~# yum -y install docker-ce-19.03.14

(7) 添加阿里云docker仓库加速(所有主机上操作)

root@centos-master ~# mkdir -p /etc/docker
root@centos-master ~# tee /etc/docker/daemon.json <<-‘EOF’
{
“registry-mirrors”:[“https://5twf62k1.mirror.aliyuncs.com”],
“exec-opts”:[“native.cgroupdriver=systemd”]
}
EOF
root@centos-master ~# systemctl daemon-reload`
root@centos-master ~# systemctl restart docker
root@centos-master ~# systemctl enable docker
root@centos-master ~# docker info | grep Cgroup

(8) 三台主机做免秘登录

root@centos-master ~# ssh-keygen
root@centos-master ~# ssh-copy-id centos-master
root@centos-master ~# ssh-copy-id centos-node1
root@centos-master ~# ssh-copy-id centos-node2

(9) 关闭selinux

root@centos-master ~# setenforce 0
root@centos-master ~# sed -i “s/^SELINUX=enforcing/SELINUX=disabled/g” /etc/selinux/config

安装kubectl、kubelet、kubeadm(所有主机上操作)

(1) 添加阿里云k8s源

root@centos-master ~# cat < /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-aarch64/ #x86的机器可以改成x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

(2) 安装组件(所有节点操作)

root@centos-master ~# yum install kubeadm-1.19.0-0 kubelet-1.19.0-0 kubectl-1.19.0-0 -y
root@centos-master ~# systemctl enable kubelet

(3) 初始化集群(master集群操作)

root@centos-master ~# kubeadm init --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers --kubernetes-version=v1.19.0 --pod-network-cidr=10.244.0.0/16

初始化过程中可能会出现这个问题
问题原因: 是由于docker的Cgroup Driver和kubelet的Cgroup Driver不一致导致的,此处选择修改docker的和kubelet一致
问题查看: docker info | grep Cgroup
Cgroup Driver: cgroupfs
解决办法:
编辑文件/usr/lib/systemd/system/docker.service修改
ExecStart=/usr/bin/dockerd --exec-opt native.cgroupdriver=systemd
systemctl daemon-reload
systemctl restart docker
docker info | grep Cgroup
Cgroup Driver: systemd

PS:这个图是之前的. 初始化命令可能有所差别.但不影响
(4) 初始化返回成功信息
在这里插入图片描述
记录生成的最后部分内容,此内容需要在其它节点加入Kubernetes集群时执行。
根据提示创建kubectl

root@centos-master ~# mkdir -p $HOME/.kube
root@centos-master ~# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
root@centos-master ~# sudo chown ( i d − u ) : (id -u): (idu):(id -g) $HOME/.kube/config
ps: 如果初始化失败
先执行kubeadm reset 恢复初始化状态. 避免再次初始化出现问题
恢复初始状态操作
重置kubelet和iptables
systemctl daemon-reload && systemctl restart kubelet && iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
删除tunl0网卡. 如果有的话
modprobe -r ipip

node节点加入k8s集群

加入前提. 做完准备工作并已安装k8s
(1) node节点加入k8s集群

root@centos-node1 ~# kubeadm join 192.18.4.4:6443 --token abcdef.0123456789abcdef
–discovery-token-ca-cert-hash sha256:311a585cc14cfee8ff4a10f4969a35cecddf57438673f9fa86497f4cb086a5d5
######token有效期时间为24小时,过期后需要再master主机上重新获取#####

获取新的token命令:

root@centos-master ~# kubeadm token create --print-join-command

(2) 在master查看已加入的节点

root@centos-master ~# kubectl get nodes -o wide
查询所有pod和service等
root@centos-master ~# kubectl get all --all-namespaces -o wide
在这里插入图片描述ps: 这里的状态为Ready . 正常来说刚加入的节点为NoReady. 这里是因为我已经加了calico插件.

calico v3.17.1 安装

1)下载yaml文件

root@centos-master ~#curl https://docs.projectcalico.org/manifests/calico-etcd.yaml -o calico.yaml
ps: 默认下载3.20.0版本. 指定版本修改yaml文件中的版本号为v3.17.1
ps: 前几天还是默认3.19.4呢~~
在这里插入图片描述

(2) calico.yaml需要修改的地方
修改CALICO_IPV4POOL_CIDR, 取消注释
修改value为k8s初始化时 --pod-network-cidr指定的IP地址段
PS: 注意格式要求很严格
在这里插入图片描述
当前默认安装的网络模式为IPIP. 不做修改
IPIP模式 calico会使用tunl0作为路由使pod相互通信, 给tunl0分配IP.

修改设置calico连接etcd., 使用etcd的证书

etcd地址
ETCD_ENDPOINTS="https://192.18.4.4:2379"
sed -i "s#.*etcd_endpoints:.*#  etcd_endpoints: "\${ETCD_ENDPOINTS}\"#g" calico.yaml
sed -i "s#__ETCD_ENDPOINTS__#${ETCD_ENDPOINTS}#g" calico.yaml
ETCD 证书信息
ETCD_CA=\`cat /etc/kubernetes/pki/etcd/ca.crt | base64 | tr -d '\n'\`
ETCD_CERT=\`cat /etc/kubernetes/pki/etcd/server.crt | base64 | tr -d '\n'\`
ETCD_KEY=\`cat /etc/kubernetes/pki/etcd/server.key | base64 | tr -d '\n'\`
sed -i "s#.*etcd-ca:.*#  etcd-ca: ${ETCD_CA}#g" calico.yaml
sed -i "s#.*etcd-cert:.*#  etcd-cert: ${ETCD_CERT}#g" calico.yaml
sed -i "s#.*etcd-key:.*#  etcd-key: ${ETCD_KEY}#g" calico.yaml
sed -i 's#.*etcd_ca:.*#  etcd_ca: "/calico-secrets/etcd-ca"#g' calico.yaml
sed -i 's#.*etcd_cert:.*#  etcd_cert: "/calico-secrets/etcd-cert"#g' calico.yaml
sed -i 's#.*etcd_key:.*#  etcd_key: "/calico-secrets/etcd-key"#g' calico.yaml
sed -i "s#__ETCD_CA_CERT_FILE__#/etc/kubernetes/pki/etcd/ca.crt#g" calico.yaml
sed -i "s#__ETCD_CERT_FILE__#/etc/kubernetes/pki/etcd/server.crt#g" calico.yaml
sed -i "s#__ETCD_KEY_FILE__#/etc/kubernetes/pki/etcd/server.key#g" calico.yaml
sed -i "s#__KUBECONFIG_FILEPATH__#/etc/cni/net.d/calico-kubeconfig#g" calico.yaml

(3) 安装calicov3.17.1

root@centos-master ~#kubectl apply -f calico.yaml
执行完等待个几分钟. node节点需要下载所需要的镜像和启动容器

(4) 将证书文件copy到node节点

root@centos-master ~# scp -r /etc/kubernetes/pki/etcd root@centos-node1:/etc/kubernetes/pki/
root@centos-master ~# scp -r /etc/kubernetes/pki/etcd root@centos-node2:/etc/kubernetes/pki/

#查看节点pod状态都为Running
root@centos-master ~# kubectl get pod --all-namespaces -o wide
在这里插入图片描述
最后的部署完之后集群的样子就是这样在这里插入图片描述
查看pod的详细信息和log日志用下面的命令 可以有效地确定问题原因
查看calico-node-877k8的logs日志. 也就是查看这个docker容器的日志. 跟docker logs差不多
-n 制定namespace
kubectl -n kube-system logs -f calico-node-877k8
查看有哪些ns
在这里插入图片描述
查看pod的详细信息
kubectl describe pod -n (ns) (pod-name)
大概就这样
在这里插入图片描述


### 安装calicoctl管理工具(所有主机操作)
下载地址: https://github.com/projectcalico/calicoctl/releases/download/v3.17.1/calicoctl-linux-arm64
以master节点为例
>root@centos-master ~# mv calicoctl-linux-arm64 /usr/bin/calicoctl
root@centos-master ~# chmod +x /usr/bin/calictl
root@centos-master ~# mkdir /etc/calico/



root@centos-master ~# vim /etc/calico/calicoctl.cfg
写入以下内容连接etcd
apiVersion: projectcalico.org/v3
kind: CalicoAPIConfig
metadata:
spec:
datastoreType: “etcdv3”
kubeconfig: “/root/.kube/config”
etcdEndpoints: “https://192.18.4.4:2379”
etcdKeyFile: “/etc/kubernetes/pki/etcd/server.key”
etcdCertFile: “/etc/kubernetes/pki/etcd/server.crt”
etcdCACertFile: “/etc/kubernetes/pki/etcd/ca.crt”

使用calicoctl查看节点

==ps: 这里我没开启IPIP模式上面calico我设置的Never~当前我的集群为BGP mesh模式(全网互联模式)==
![在这里插入图片描述](https://img-blog.csdnimg.cn/17b156f829bf46b0ac5be564d7bfe5cf.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI5NTg5NTIx,size_16,color_FFFFFF,t_70)
查看tunl0
未分配IP. 不是IPIP模式
![在这里插入图片描述](https://img-blog.csdnimg.cn/20bc6ad8e1e6415fa319a1716152c758.png)


##calico切换网络模式和简单的网络策略制定下一章再写~

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值