版本说明
操作系统:Ubuntu 20.04
kubelet:1.24.2
kubeadm:1.24.2
kubelet:1.24.2
环境准备(三台都需要操作)
主机IP地址
master节点:192.168.12.30
node1节点:192.168.12.31
node2节点:192.168.12.32
关闭防火墙
systemctl stop ufw.service #关闭防火墙
systemctl disable ufw.service #永久关闭防火墙,开机不自启
systemctl status ufw.service #查看防火墙状态
iptables -F #清空防火墙规则
配置主机名
编辑hosts文件
root@master:~# vim /etc/hosts
添加:
192.168.12.30 master
192.168.12.31 node1
192.168.12.32 node2
保存后将此文件拷贝到另外两台主机上
root@master:~# scp /etc/hosts root@node1:/etc
root@master:~# scp /etc/hosts root@node2:/etc
测试网络连通性
root@master:~# ping node1
root@master:~# ping node2
关闭swap分区
root@master:~# swapoff -a #临时关闭
root@master:~# vim /etc/fstab #永久关闭
开头加#注释/swap.img none swap sw 0 0
禁用swap
配置系统信息,禁止使用swap空间,只有在报内存不够(omm)使用时才能使用swap空间
root@smaster:~# vim /etc/sysctl.conf
添加:
vm.swappiness = 1
root@master:~# sysctl -p #重新加载配置文件
vm.swappiness = 1
root@master:~# free -m #验证是否关闭,total为0证明关闭
将桥接的IPv4的流量传递到iptables的链
有一些流量是不能走iptables链,因为linux内核有一个过滤器,每个流量都会经过他,然后再匹配是否进入当前应用程序去处理,所以会导致流量丢失
br_netfilter:br_netfilter模块可以是iptables规则可以再linux Bridags上面工作,用于将桥接的流量转发至iptables链
永久性加载内核
root@master:~# vim /etc/modules-load.d/k8s.conf
添加:
overlay
br_netfilter
临时加载内核
root@master:~# modprobe overlay
root@master:~# modprobe br_netfilter
编辑sysctl.conf
root@master:~# vim /etc/sysctl.conf
添加:
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
root@master:~# sysctl -p #生效配置
安装containerd
没有使用国内源的建议使用国内源,我这边是在安装系统时已经设置为国内的aliyun
更新源
root@master:~# apt-get update
安装一些必要的系统工具
root@master:~# apt-get -y install apt-transport-https ca-certificates curl software-properties-common
安装GPG证书
root@master:~# curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add –
写入软件源信息
root@master:~# add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
更新软件源
root@master:~# apt-get -y update
安装containerd
root@master:~# apt-get -y install containerd.io
查看版本
root@master:~# containerd -v
更改containerd配置文件
修改容器资源站地址
原:sandbox_image = "registry.k8s.io/pause:3.6"
修改为:sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.6"
开启systemd_cgroup驱动器
原:systemd_cgroup = false
修改为:systemd_cgroup = true
启动containerd
root@master:~# systemctl restart containerd.service
root@master:~# systemctl status containerd.service
root@master:~# systemctl enable containerd
查看版本
root@master:~# ctr version
安装kubernetes准备工作
root@master:~# apt-get update && apt-get install -y apt-transport-https
root@master:~# curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
root@master:~# cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
> deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
> EOF
root@master:~# apt-get update
查看可以下载的版本
root@master:~# apt-cache madison kubelet
安装kubelet、kubeadm、kubectl
root@master:~# apt-get install -y kubelet=1.24.2-00 kubeadm=1.24.2-00 kubectl=1.24.2-00
查看版本
root@master:~# kubelet –version
root@master:~# kubeadm version
安装工具,在使用kubeadm、kubectl时可以使用tab键
root@master:~# apt install bash-completion
root@master:~# source <(kubeadm completion bash)
root@master:~# source <(kubectl completion bash)
root@master:~# source <(crictl completion bash)
root@master:~# vim .bashrc
添加:
source <(kubeadm completion bash)
source <(kubectl completion bash)
source <(crictl completion bash)
root@master:~# source .bashrc
指定k8s使用containerd
root@master:~# crictl config runtime-endpoint unix:///run/containerd/containerd.sock
root@master:~# vim /etc/crictl.yaml
root@master:~# vim /etc/containerd/config.toml
添加:io.containerd.runtime.v1.linux
root@master:~# systemctl daemon-reload
root@master:~# systemctl restart containerd.service
root@master:~# crictl images
下载镜像,查看镜像
root@ master:~# crictl pull nginx
root@master:~# crictl images
以下master节点操作
生成配置文件
root@master:~# kubeadm config print init-defaults > init.yaml
root@master:~# vim init.yaml
修改:
master主机节点的IP地址
原:advertiseAddress: 1.2.3.4
修改为advertiseAddress: 192.168.12.30
master主机节点的主机名
原:name: node
修改为:name: master
镜像仓库地址
原:imageRepository: k8s.gcr.io
修改为:imageRepository: registry.aliyuncs.com/google_containers
自己的kubernetes版本
原:kubernetesVersion: 1.24.0
修改为:kubernetesVersion: 1.24.2
初始化集群
root@master:~# kubeadm init --config=init.yaml
提示想要控制集群的话需要执行如下命令
root@master:~# mkdir -p $HOME/.kube
root@master:~# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
root@master:~# sudo chown $(id -u):$(id -g) $HOME/.kube/config
root@master:~# export KUBECONFIG=/etc/kubernetes/admin.conf
安装colico
root@master:~#
curl https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml -O
root@master:~# vim calico.yaml
修改:
- name: CALICO_IPV4POOL_CIDR
value: "10.96.0.0/12"
root@master:~# kubectl apply -f calico.yaml
root@master:~# kubectl get pod --all-namespaces
添加集群节点(两台node节点执行)
node1节点
root@node1:~# kubeadm join 192.168.12.30:6443 --token abcdef.0123456789abcdef \
> --discovery-token-ca-cert-hash sha256:0b276b86bdc74d0af08ffc7bafcbfa30acdfb4a9087c9e71d6864b9a8ccfe58e
node2节点
root@node2:~# kubeadm join 192.168.12.30:6443 --token abcdef.0123456789abcdef \
> --discovery-token-ca-cert-hash sha256:0b276b86bdc74d0af08ffc7bafcbfa30acdfb4a9087c9e71d6864b9a8ccfe58e
master节点执行
查看节点
root@master:~# kubectl get nodes
root@master:~# kubectl get pod --all-namespaces
同步需要一定的时间
配置coredns冗余
root@master:~# kubectl get pod --all-namespaces -o wide
root@master:~# kubectl --namespace kube-system rollout restart deployment coredns
root@master:~# kubectl get pod --all-namespaces -o wide