学习笔记十一:Kubeadm安装K8S单master节点测试环境集群V1.20.6
Swap是交换分区,如果机器内存不够,会使用swap分区,但是swap分区的性能较低,k8s设计的时候为了能提升性能,默认是不允许使用交换分区的。所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将数据包发往本机另一块网卡,该网卡根据路由表继续发送数据包。这通常是路由器所要实现的功能。根据我们自己的需求修改配置,比如修改 imageRepository 的值,kub
这里写目录标题
环境规划
podSubnet(pod网段) 10.244.0.0/16
serviceSubnet(service网段): 10.96.0.0/16
物理机网段:192.168.40.0/24
实验环境规划:
操作系统:centos7.9
配置: 4Gib内存/4vCPU/60G硬盘
网络:NAT
master:apiserver,controller-manager,etcd,scheduler,docker,kube-proxy,calico
node:kubelet,kube-proxy,docker,calico,coredns
初始化安装k8s集群的实验环境k8smaster1
参考:学习笔记一:VMware配置虚拟机centos并初始化
https://blog.csdn.net/weixin_43258559/article/details/122121258
vi /etc/sysconfig/network-scripts/ifcfg-ens33
这里的网卡配置,DNS1一定要与网关一致
GATEWAY=192.168.40.2
DNS1=192.168.40.2
修改主机名
hostnamectl set-hostname k8smaster1 && bash
#k8smaster1 为服务器名称
关闭交换分区swap,提升性能
swapoff -a
永久关闭:注释swap挂载,给swap这行开头加一下注释
vim /etc/fstab
#/dev/mapper/centos-swap swap swap defaults 0 0
修改机器内核参数
modprobe br_netfilter
echo "modprobe br_netfilter" >> /etc/profile
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
sysctl -p /etc/sysctl.d/k8s.conf
重启后模块会失效,下面是开机自动加载模块的脚本
vim /etc/rc.sysinit
#!/bin/bash
for file in /etc/sysconfig/modules/*.modules ; do
[ -x $file ] && $file
done
在/etc/sysconfig/modules/目录下新建文件如下
vim /etc/sysconfig/modules/br_netfilter.modules
modprobe br_netfilter
chmod 755 /etc/sysconfig/modules/br_netfilter.modules #增加权限
lsmod |grep br_netfilter #重启机器模块也会自动加载
配置安装k8s组件需要的阿里云的repo源
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
安装基础软件包
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 vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack ntpdate telnet ipvsadm
安装docker-ce
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install docker-ce-20.10.6 docker-ce-cli-20.10.6 containerd.io -y
systemctl start docker && systemctl enable docker && systemctl status docker
配置docker镜像加速器和驱动
cat >/etc/docker/daemon.json <<EOF
{
"registry-mirrors":["https://rsbud4vc.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com","http://qtid6917.mirror.aliyuncs.com", "https://rncxm540.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
修改docker文件驱动为systemd,默认为cgroupfs,kubelet默认使用systemd,两者必须一致才可以。
systemctl daemon-reload && systemctl restart docker
systemctl status docker
安装初始化k8s需要的软件包
yum install -y kubelet-1.20.6 kubeadm-1.20.6 kubectl-1.20.6
注:每个软件包的作用
Kubeadm: kubeadm是一个工具,用来初始化k8s集群的
kubelet: 安装在集群所有节点上,用于启动Pod的
kubectl: 通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件
云盘下载 k8simage-1-20-6.tar.gz 后导入服务器
链接:https://pan.baidu.com/s/1SYU77sfFmiY6wmg0B1syng?pwd=i00j
提取码:i00j
docker load -i k8simage-1-20-6.tar.gz
关机以便node节点克隆
最好在上面这步做完后,把k8smaster1关机,然后创建快照,以便node克隆,克隆好的node,更改IP,hostname后就可以直接加到k8smaster1了
kubeadm初始化k8s集群
使用kubeadm初始化k8s集群
根据我们自己的需求修改配置,比如修改 imageRepository 的值,kube-proxy 的模式为 ipvs,初始化节点的时候需要指定cgroupDriver为systemd
kubeadm config print init-defaults > kubeadm.yaml
基于kubeadm.yaml文件初始化k8s
k8smaster1执行,node节点是不做的
kubeadm.yaml配置如下:
cat >kubeadm.yaml<<EOF
apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: abcdef.0123456789abcdef
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 192.168.40.10 #控制节点的ip
bindPort: 6443
nodeRegistration:
criSocket: /var/run/dockershim.sock
name: k8smaster1 #控制节点主机名
taints:
- effect: NoSchedule
key: node-role.kubernetes.io/master
---
apiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
type: CoreDNS
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: v1.20.6
networking:
dnsDomain: cluster.local
serviceSubnet: 10.96.0.0/12
podSubnet: 10.244.0.0/16 #指定pod网段, 需要新增加这个
scheduler: {}
#追加如下几行
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd
EOF
kubeadm init --config=kubeadm.yaml --ignore-preflight-errors=SystemVerification
显示如下,说明安装完成:
配置kubectl的配置文件config,相当于对kubectl进行授权,这样kubectl命令可以使用这个证书对k8s集群进行管理
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl get nodes
此时集群状态还是NotReady状态,因为没有安装网络插件。
k8s集群-添加第一个工作节点
虚拟机初始化参考:学习笔记一:VMware配置虚拟机centos并初始化
https://blog.csdn.net/weixin_43258559/article/details/122121258
- 也可以克隆k8smaster1 在 安装初始化k8s需要的软件包 这步的快照
- 使用k8smaster1快照,更改IP和hostname后直接加入到k8smaster1,要加参数–ignore-preflight-errors=SystemVerification
如果遗忘了节点的token可以在master节点执行下列命令获取token
kubeadm token create --print-join-command
在node节点执行
kubeadm join 192.168.40.10:6443 --token abcdef.0123456789abcdef \
> --discovery-token-ca-cert-hash sha256:c88304bde9d24cd877f7242039a164f9b1307cb06354cf61c69d338cfe938c08 --ignore-preflight-errors=SystemVerification
关闭交换分区swap,提升性能
swapoff -a
永久关闭:注释swap挂载,给swap这行开头加一下注释
vim /etc/fstab
#/dev/mapper/centos-swap swap swap defaults 0 0
修改机器内核参数
modprobe br_netfilter
echo "modprobe br_netfilter" >> /etc/profile
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
sysctl -p /etc/sysctl.d/k8s.conf
配置安装k8s组件需要的阿里云的repo源
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
安装基础软件包
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 vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack ntpdate telnet ipvsadm
安装docker-ce
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install docker-ce-20.10.6 docker-ce-cli-20.10.6 containerd.io -y
systemctl start docker && systemctl enable docker && systemctl status docker
配置docker镜像加速器和驱动
cat >/etc/docker/daemon.json <<EOF
{
"registry-mirrors":["https://rsbud4vc.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com","http://qtid6917.mirror.aliyuncs.com", "https://rncxm540.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
修改docker文件驱动为systemd,默认为cgroupfs,kubelet默认使用systemd,两者必须一致才可以。
systemctl daemon-reload && systemctl restart docker
systemctl status docker
安装初始化k8s需要的软件包
yum install -y kubelet-1.20.6 kubeadm-1.20.6 kubectl-1.20.6
注:每个软件包的作用
Kubeadm: kubeadm是一个工具,用来初始化k8s集群的
kubelet: 安装在集群所有节点上,用于启动Pod的
kubectl: 通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件
docker load -i k8simage-1-20-6.tar.gz
在k8smaster1上查看加入节点的命令:
kubeadm token create --print-join-command
在k8snode1节点执行上面获取到的值,并添加参数–ignore-preflight-errors=SystemVerification
kubeadm join 192.168.40.10:6443 --token abcdef.0123456789abcdef \
> --discovery-token-ca-cert-hash sha256:c88304bde9d24cd877f7242039a164f9b1307cb06354cf61c69d338cfe938c08 --ignore-preflight-errors=SystemVerification
在k8smaster1上查看集群节点状况:
kubectl get nodes
k8s集群-添加第二个工作节点也和上面这个步骤一样
如果初始化有问题,k8s重新初始化
kubeadm reset
rm -rf /root/.kube
rm -rf /etc/cni/net.d
修改完一些配置比如kubeadm-config.yaml 后,重新初始化
kubeadm init --config kubeadm-config.yaml --ignore-preflight-errors=SystemVerification
安装kubernetes网络组件-Calico
上传calico.yaml到k8smaster1上,使用yaml文件安装calico 网络插件 。
链接:https://pan.baidu.com/s/1MzhaKeNdaHB7gwvhPTCMOg?pwd=91vs
提取码:91vs
kubectl apply -f calico.yaml
#注:在线下载配置文件地址是:https://docs.projectcalico.org/manifests/calico.yaml
等一分钟左右再次查看集群状态
kubectl get pod -n kube-system
kubectl get nodes
#STATUS状态是Ready,说明k8s集群正常运行了
可以看到k8snode1的ROLES角色为空,就表示这个节点是工作节点。
可以把k8snode1的ROLES变成work,按照如下方法:
kubectl label node k8snode1 node-role.kubernetes.io/worker=worker
测试在k8s创建pod是否可以正常访问网络
把busybox-1-28.tar.gz上传到k8snode1、k8snode2节点,手动解压
链接:https://pan.baidu.com/s/1HdG5Zv3LThn4H5n6-bOxDQ?pwd=kyue
提取码:kyue
docker load -i busybox-1-28.tar.gz
kubectl run busybox --image busybox:1.28 --image-pull-policy=IfNotPresent --restart=Never --rm -it busybox -- sh
ping www.baidu.com
通过上面可以看到能访问网络,说明calico网络插件已经被正常安装了
测试coredns是否正常
kubectl run busybox --image busybox:1.28 --restart=Never --rm -it busybox -- sh
nslookup kubernetes.default.svc.cluster.local
10.96.0.10 就是我们coreDNS的clusterIP,说明coreDNS配置好了。
解析内部Service的名称,是通过coreDNS去解析的。
特别注意:busybox要用指定的1.28版本,不能用最新版本,最新版本,nslookup会解析不到dns和ip
更多推荐
所有评论(0)