使用kubeadm安装k8s1.24高可用集群
目录
1、初始化安装k8s集群的实验环境
1.1 修改机器IP,变成静态IP
关闭selinux
1.2 配置机器主机名
1.3 配置主机hosts文件,相互之间通过主机名互相访问
1.4 配置主机之间无密码登录
1.5 关闭交换分区swap,提升性能
1.6 修改机器内核参数
1.7 关闭firewalld防火墙
1.8 关闭selinux
1.9 配置阿里云的repo源
1.10 配置安装k8s组件需要的阿里云的repo源
1.11 配置时间同步
1.12 开启ipvs
1.13 安装基础软件包
2、安装containerd服务
2.1 安装containerd
3、安装初始化k8s需要的软件包
4、kubeadm初始化k8s集群
6、扩容k8s集群-添加第一个工作节点
8、安装kubernetes网络组件-Calico
9、测试在k8s创建pod是否可以正常访问网络
10、测试coredns是否正常
文档中的YAML文件配置直接复制粘贴可能存在格式错误,故实验中所需要的YAML文件以及本地包均打包至网盘
链接:https://pan.baidu.com/s/1Z9MVBH19DULolsvHeILr1g
提取码:tw6t
podSubnet(pod网段) 10.244.0.0/16
serviceSubnet(service网段): 10.96.0.0/16
实验环境规划:
准备两台虚拟机
操作系统:centos7.6
配置: 4Gib内存/6vCPU/100G硬盘
网络:NAT
机器IP:
K8s控制节点Ip: 192.168.40.180
K8s工作节点ip: 192.168.40.181
开启虚拟机的虚拟化:
1、初始化安装k8s集群的实验环境
1.1 修改机器IP,变成静态IP
vim /etc/sysconfig/network-scripts/ifcfg-ens33文件
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=192.168.40.180
NETMASK=255.255.255.0
GATEWAY=192.168.40.2
DNS1=192.168.40.2
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
DEVICE=ens33
ONBOOT=yes
#修改配置文件之后需要重启网络服务才能使配置生效,重启网络服务命令如下:
service network restart
注:/etc/sysconfig/network-scripts/ifcfg-ens33文件里的配置说明:
NAME=ens33 #网卡名字,跟DEVICE名字保持一致即可
DEVICE=ens33 #网卡设备名,大家ip addr可看到自己的这个网卡设备名,每个人的机器可能这个名字不一样,需要写自己的
BOOTPROTO=static #static表示静态ip地址
ONBOOT=yes #开机自启动网络,必须是yes
IPADDR=192.168.40.180 #ip地址,需要跟自己电脑所在网段一致
NETMASK=255.255.255.0 #子网掩码,需要跟自己电脑所在网段一致
GATEWAY=192.168.40.2 #网关,在自己电脑打开cmd,输入ipconfig /all可看到
DNS1=192.168.40.2 #DNS,在自己电脑打开cmd,输入ipconfig /all可看到
关闭selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
#修改selinux配置文件之后,重启机器,selinux配置才能永久生效
getenforce
Disabled
#显示Disabled说明selinux已经关闭
1.2 配置机器主机名
在192.168.40.180上执行如下:
hostnamectl set-hostname xianchaomaster1 && bash
在192.168.40.181上执行如下:
hostnamectl set-hostname xianchaonode1 && bash
1.3 配置主机hosts文件,相互之间通过主机名互相访问
修改每台机器的/etc/hosts文件,增加如下两行:
192.168.40.180 xianchaomaster1
192.168.40.181 xianchaonode1
1.4 配置主机之间无密码登录
[root@xianchaomaster1 ~]# ssh-keygen #一路回车,不输入密码
把本地生成的密钥文件和私钥文件拷贝到远程主机
[root@xianchaomaster1 ~]# ssh-copy-id xianchaomaster1
[root@xianchaomaster1 ~]# ssh-copy-id xianchaonode1
[root@ xianchaonode1 ~]# ssh-keygen #一路回车,不输入密码
把本地生成的密钥文件和私钥文件拷贝到远程主机
[root@ xianchaonode1 ~]# ssh-copy-id xianchaomaster1
[root@xianchaonode1 ~]# ssh-copy-id xianchaonode1
1.5 关闭交换分区swap,提升性能
#临时关闭
[root@xianchaomaster1 ~]# swapoff -a
[root@xianchaonode1 ~]# swapoff -a
#永久关闭:注释swap挂载,给swap这行开头加一下注释
[root@xianchaomaster1 ~]# vim /etc/fstab
#/dev/mapper/centos-swap swap swap defaults 0 0
[root@ xianchaonode1 ~]# vim /etc/fstab
#/dev/mapper/centos-swap swap swap defaults 0 0
问题1:为什么要关闭swap交换分区?
Swap是交换分区,如果机器内存不够,会使用swap分区,但是swap分区的性能较低,k8s设计的时候为了能提升性能,默认是不允许使用交换分区的。Kubeadm初始化的时候会检测swap是否关闭,如果没关闭,那就初始化失败。如果不想要关闭交换分区,安装k8s的时候可以指定--ignore-preflight-errors=Swap来解决。
1.6 修改机器内核参数
[root@xianchaomaster1 ~]# modprobe br_netfilter
[root@xianchaomaster1 ~]# cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
[root@xianchaomaster1 ~]# sysctl -p /etc/sysctl.d/k8s.conf
[root@xianchaonode1 ~]# modprobe br_netfilter
[root@xianchaonode1 ~]# cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
[root@xianchaonode1 ~]# sysctl -p /etc/sysctl.d/k8s.conf
问题1:sysctl是做什么的?
在运行时配置内核参数
-p 从指定的文件加载系统参数,如不指定即从/etc/sysctl.conf中加载
问题2:为什么要执行modprobe br_netfilter?
修改/etc/sysctl.d/k8s.conf文件,增加如下三行参数:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
sysctl -p /etc/sysctl.d/k8s.conf出现报错:
sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-ip6tables: No such file or directory
sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables: No such file or directory
解决方法:
modprobe br_netfilter
问题3:为什么开启net.bridge.bridge-nf-call-iptables内核参数?
在centos下安装docker,执行docker info出现如下警告:
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled
解决办法:
vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
问题4:为什么要开启net.ipv4.ip_forward = 1参数?
kubeadm初始化k8s如果报错:
就表示没有开启ip_forward,需要开启。
net.ipv4.ip_forward是数据包转发:
出于安全考虑,Linux系统默认是禁止数据包转发的。所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将数据包发往本机另一块网卡,该网卡根据路由表继续发送数据包。这通常是路由器所要实现的功能。
要让Linux系统具有路由转发功能,需要配置一个Linux的内核参数net.ipv4.ip_forward。这个参数指定了Linux系统当前对路由转发功能的支持情况;其值为0时表示禁止进行IP转发;如果是1,则说明IP转发功能已经打开。
1.7 关闭firewalld防火墙
[root@xianchaomaster1 ~]# systemctl stop firewalld ; systemctl disable firewalld
[root@xianchaonode1 ~]# systemctl stop firewalld ; systemctl disable firewalld
1.8 关闭selinux
[root@xianchaomaster1 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
#修改selinux配置文件之后,重启机器,selinux配置才能永久生效
[root@xianchaonode1 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
#修改selinux配置文件之后,重启机器,selinux配置才能永久生效
[root@xianchaomaster1 ~]#getenforce
Disabled
#显示Disabled说明selinux已经关闭
[root@xianchaonode1 ~]#getenforce
Disabled
#显示Disabled说明selinux已经关闭
1.9 配置阿里云的repo源
#配置国内安装docker和containerd的阿里云的repo源
[root@xianchaomaster1 ~]#yum install yum-utils -y
[root@xianchaomaster1 ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@xianchaonode1 ~]# yum install yum-utils -y
[root@xianchaonode1 ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
1.10 配置安装k8s组件需要的阿里云的repo源
[root@xianchaomaster1 ~]#cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
EOF
#将xianchaomaster1上Kubernetes的repo源复制给xianchaonode1和xianchaonode2
[root@xianchaomaster1 ~]# scp /etc/yum.repos.d/kubernetes.repo xianchaonode1:/etc/yum.repos.d/
1.11 配置时间同步
在xianchaomaster1上执行如下:
#安装ntpdate命令
[root@xianchaomaster1 ~]# yum install ntpdate -y
#跟网络时间做同步
[root@xianchaomaster1 ~]# ntpdate cn.pool.ntp.org
#把时间同步做成计划任务
[root@xianchaomaster1 ~]# crontab -e
* */1 * * * /usr/sbin/ntpdate cn.pool.ntp.org
#重启crond服务
[root@xianchaomaster1 ~]#service crond restart
在xianchaonode1上执行如下:
#安装ntpdate命令
[root@ xianchaonode1 ~]# yum install ntpdate -y
#跟网络时间做同步
[root@ xianchaonode1 ~]#ntpdate cn.pool.ntp.org
#把时间同步做成计划任务
[root@ xianchaonode1 ~]#crontab -e
* */1 * * * /usr/sbin/ntpdate cn.pool.ntp.org
#重启crond服务
[root@ xianchaonode1 ~]#service crond restart
1.12 开启ipvs
安装k8s: 没有在内核加载ipvs模块,会自动适用iptables做代理,如果开启了ipvs,那会使用ipvs做规则
#把ipvs.modules上传到xianchaomaster1机器的/etc/sysconfig/modules/目录下
[root@xianchaomaster1]# chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep ip_vs
ip_vs_ftp 13079 0
nf_nat 26583 1 ip_vs_ftp
ip_vs_sed 12519 0
ip_vs_nq 12516 0
ip_vs_sh 12688 0
ip_vs_dh 12688 0
#把ipvs.modules拷贝到xianchaonode1的/etc/sysconfig/modules/目录下
[root@xianchaomaster1 ~]# scp /etc/sysconfig/modules/ipvs.modules xianchaonode1:/etc/sysconfig/modules/
[root@xianchaonode1]# chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep ip_vs
ip_vs_ftp 13079 0
nf_nat 26583 1 ip_vs_ftp
ip_vs_sed 12519 0
ip_vs_nq 12516 0
ip_vs_sh 12688 0
ip_vs_dh 12688 0
问题1:ipvs是什么?
ipvs (IP Virtual Server) 实现了传输层负载均衡,也就是我们常说的4层LAN交换,作为 Linux 内核的一部分。ipvs运行在主机上,在真实服务器集群前充当负载均衡器。ipvs可以将基于TCP和UDP的服务请求转发到真实服务器上,并使真实服务器的服务在单个 IP 地址上显示为虚拟服务。
问题2:ipvs和iptable对比分析
kube-proxy支持 iptables 和 ipvs 两种模式, 在kubernetes v1.8 中引入了 ipvs 模式,在 v1.9 中处于 beta 阶段,在 v1.11 中已经正式可用了。iptables 模式在 v1.1 中就添加支持了,从 v1.2 版本开始 iptables 就是 kube-proxy 默认的操作模式,ipvs 和 iptables 都是基于netfilter的,但是ipvs采用的是hash表,因此当service数量达到一定规模时,hash查表的速度优势就会显现出来,从而提高service的服务性能。那么 ipvs 模式和 iptables 模式之间有哪些差异呢?
1、ipvs 为大型集群提供了更好的可扩展性和性能
2、ipvs 支持比 iptables 更复杂的复制均衡算法(最小负载、最少连接、加权等等)
3、ipvs 支持服务器健康检查和连接重试等功能
1.13 安装基础软件包
[root@xianchaomaster1 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack ntpdate telnet ipvsadm
[root@xianchaonode1 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack ntpdate telnet ipvsadm
总结:
改了ip地址
Selinux
配置主机名
配置hosts文件
配置主机之间无密码登录
Swap交换分区
Firewalld
安装containerd的yum源
安装k8s命令行工具yum源
时间同步
开启ipvs
安装基础包
2、安装containerd服务
2.1 安装containerd
接下来安装步骤在k8s控制节点和工作节点都要操作
在各个服务器节点上安装容器运行时 Containerd。下载Containerd的二进制包:
wget https://github.com/containerd/containerd/releases/download/v1.6.4/cri-containerd-cni-1.6.4-linux-amd64.tar.gz
这个二进制包在课件里也有,大家可以直接从课件里上传到k8s所有机器上
cri-containerd-cni-1.6.4-linux-amd64.tar.gz 压缩包中已经按照官方二进制部署推荐的目录结构布局好。 里面包含了 systemd 配置文件,containerd 以及 cni 的部署文件。 将解压缩到系统的根目录 / 中:
tar -zxvf cri-containerd-cni-1.6.4-linux-amd64.tar.gz -C /
注意经测试 cri-containerd-cni-1.6.4-linux-amd64.tar.gz 包中包含的 runc 在 CentOS 7 下的动态链接有问题,这里从 runc 的 github 上单独下载 runc,并替换上面安装的 containerd 中的 runc:
wget https://github.com/opencontainers/runc/releases/download/v1.1.2/runc.amd64
runc.amd64在课件里也有,大家可以手动上传到k8s的各个节点上
cp runc.amd64 /usr/local/sbin/runc
chmod +x /usr/local/sbin/runc
接下来生成 containerd 的配置文件:
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
根据文档 Container runtimes 中的内容,对于使用 systemd 作为 init system 的 Linux 的发行版,使用 systemd 作为容器的 cgroup driver 可以确保服务器节点在资源紧张的情况更加稳定,因此这里配置各个节点上 containerd 的 cgroup driver 为 systemd。修改前面生成的配置文件 /etc/containerd/config.toml:
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
...
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
再修改 /etc/containerd/config.toml 中的
[plugins."io.containerd.grpc.v1.cri"]
...
# sandbox_image = "k8s.gcr.io/pause:3.6"
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.7"
配置 containerd 开机启动,并启动 containerd
systemctl enable containerd --now
启动containerd
systemctl start containerd
3、安装初始化k8s需要的软件包
[root@xianchaomaster1 ~]# yum install -y kubelet-1.24.1 kubeadm-1.24.1 kubectl-1.24.1
[root@xianchaomaster1 ~]# systemctl enable kubelet
[root@xianchaonode1 ~]# yum install -y kubelet-1.24.1 kubeadm-1.24.1 kubectl-1.24.1
[root@xianchaonode1 ~]# systemctl enable kubelet
注:每个软件包的作用
Kubeadm: kubeadm是一个工具,用来初始化k8s集群的
kubelet: 安装在集群所有节点上,用于启动Pod的
kubectl: 通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件
4、kubeadm初始化k8s集群
#设置容器运行时
[root@xianchaonode1 ~]# crictl config runtime-endpoint /run/containerd/containerd.sock
[root@xianchaomaster1~]# crictl config runtime-endpoint /run/containerd/containerd.sock
[root@xianchaomaster1 ~]# kubeadm config print init-defaults > kubeadm.yaml
根据我们自己的需求修改配置,比如修改 imageRepository 的值,kube-proxy 的模式为 ipvs,需要注意的是由于我们使用的containerd作为运行时,所以在初始化节点的时候需要指定cgroupDriver为systemd
kubeadm.yaml配置如下:
apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: abcdef.0123456789abcdef
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 192.168.40.180 #控制节点的ip
bindPort: 6443
nodeRegistration:
criSocket: unix:///run/containerd/containerd.sock #用containerd作为容器运行时
imagePullPolicy: IfNotPresent
name: xianchaomaster1 #控制节点主机名
taints: null
---
apiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
# 指定阿里云镜像仓库地址
kind: ClusterConfiguration
kubernetesVersion: 1.24.1 #k8s版本
networking:
dnsDomain: cluster.local
podSubnet: 10.244.0.0/16 #指定pod网段
serviceSubnet: 10.96.0.0/16 #指定Service网段
scheduler: {}
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd
#基于kubeadm.yaml初始化k8s集群
[root@xianchaomaster1 ~]# kubeadm init --config=kubeadm.yaml --ignore-preflight-errors=SystemVerification
显示如下,说明安装完成:
#配置kubectl的配置文件config,相当于对kubectl进行授权,这样kubectl命令可以使用这个证书对k8s集群进行管理
[root@xianchaomaster1 ~]# mkdir -p $HOME/.kube
[root@xianchaomaster1 ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@xianchaomaster1 ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
[root@xianchaomaster1 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
xianchaomaster1 Ready control-plane,master 2m25s v1.24.1
6、扩容k8s集群-添加第一个工作节点
在xianchaomaster1上查看加入节点的命令:
[root@xianchaomaster1 ~]# kubeadm token create --print-join-command
显示如下:
kubeadm join 192.168.40.180:6443 --token vulvta.9ns7da3saibv4pg1 --discovery-token-ca-cert-hash sha256:72a0896e27521244850b8f1c3b600087292c2d10f2565adb56381f1f4ba7057a
把xianchaonode1加入k8s集群:
[root@xianchaonode1~]# kubeadm join 192.168.40.180:6443 --token vulvta.9ns7da3saibv4pg1 --discovery-token-ca-cert-hash sha256:72a0896e27521244850b8f1c3b600087292c2d10f2565adb56381f1f4ba7057a --ignore-preflight-errors=SystemVerification
#看到上面说明xianchaonode1节点已经加入到集群了,充当工作节点
#在xianchaomaster1上查看集群节点状况:
[root@xianchaomaster1 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
xianchaomaster1 Ready control-plane,master 3m11s v1.24.1
xianchaonode1 Ready <none> 8s v1.24.1
#可以对xianchaonode1打个标签,显示work
[root@xianchaomaster1 ~]# kubectl label nodes xianchaonode1 node-role.kubernetes.io/work=work
[root@xianchaomaster1 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
xianchaomaster1 NotReady control-plane,master 27m v1.24.1
xianchaonode1 NotReady work 5m47s v1.24.1
8、安装kubernetes网络组件-Calico
把安装calico需要的镜像calico.tar.gz传到xianchaomaster1和xianchaonode1节点,手动解压:
[root@xianchaonode1 ~]# ctr -n=k8s.io images import calico.tar.gz
[root@xianchaomaster1 ~]# ctr -n=k8s.io images import calico.tar.gz
上传calico.yaml到xianchaomaster1上,使用yaml文件安装calico 网络插件 。
[root@xianchaomaster1 ~]# kubectl apply -f calico.yaml
注:在线下载配置文件地址是: https://docs.projectcalico.org/manifests/calico.yaml
。
[root@xianchaomaster1 ~]# kubectl get pod -n kube-system
再次查看集群状态。
[root@xianchaomaster1 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
xianchaomaster1 Ready control-plane,master 58m v1.24.1
xianchaonode1 Ready <none> 5m46s v1.24.1
[root@xianchaomaster1 ~]# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-677cd97c8d-fmhct 1/1 Running 0 59s
calico-node-jt475 1/1 Running 0 59s
calico-node-q4zfw 1/1 Running 0 59s
coredns-65c54cc984-sd68l 1/1 Running 0 11m
coredns-65c54cc984-srxfv 1/1 Running 0 11m
etcd-xianchaomaster1 1/1 Running 0 11m
kube-apiserver-xianchaomaster1 1/1 Running 0 11m
kube-controller-manager-xianchaomaster1 1/1 Running 0 11m
kube-proxy-bhxbh 1/1 Running 0 11m
kube-proxy-twj5w 1/1 Running 0 8m29s
kube-scheduler-xianchaomaster1 1/1 Running 0 11m
#calico的STATUS状态是Ready,说明k8s集群正常运行了
9、测试在k8s创建pod是否可以正常访问网络
#把busybox-1-28.tar.gz上传到xianchaonode1节点,手动解压
[root@xianchaonode1 ~]# ctr images import busybox-1-28.tar.gz
[root@xianchaomaster1 ~]# kubectl run busybox --image busybox:1.28 --restart=Never --rm -it busybox -- sh
/ # ping www.baidu.com
PING www.baidu.com (39.156.66.18): 56 data bytes
64 bytes from 39.156.66.18: seq=0 ttl=127 time=39.3 ms
#通过上面可以看到能访问网络,说明calico网络插件已经被正常安装了
/ # exit #退出Pod
10、测试coredns是否正常
[root@xianchaomaster1 ~]# kubectl run busybox --image busybox:1.28 --restart=Never --rm -it busybox -- sh
/ # nslookup kubernetes.default.svc.cluster.local
Server: 10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
Name: kubernetes.default.svc.cluster.local
Address 1: 10.96.0.1 kubernetes.default.svc.cluster.local
10.96.0.10 就是我们coreDNS的clusterIP,说明coreDNS配置好了。
解析内部Service的名称,是通过coreDNS去解析的。
#注意:
busybox要用指定的1.28版本,不能用最新版本,最新版本,nslookup会解析不到dns和ip