一、简介
Kubernetes(简称K8S)只有管理节点与工作节点两种类型。管理节点主要负责K8S集群管理、集群中各节点间的信息交互、任务调度,还负责容器、Pod、NameSpaces、PV等生命周期的管理。工作节点主要为容器和Pod提供计算资源、Pod及容器全部运行在工作节点上,工作节点通过kubelet服务与管理节点通信以管理容器的生命周期。并与集群其他节点进行通信。
clipboard.png
二、环境准备
Kubernetes支持在物理服务器或虚拟机上运行,本次实验基于虚拟机方式准备测试环境,Debian10操作系统,Kubeadm方式部署,配置信息如表所示:
注:本实验环境使用root用户安装,如非root用户请注意sudo权限。
IP地址 | 节点角色 | CPU | Memory | Hostname |
---|---|---|---|---|
192.168.148.145 | Master | 2C | 4G | master |
192.168.148.146 | node01 | 2C | 4G | node01 |
192.168.148.147 | node02 | 2C | 4G | node02 |
1、修改主机名
hostnamectl set-hostname master
hostnamectl set-hostname node01
hostnamectl set-hostname node02
在所有节点进行如下操作:
2、编辑/etc/hosts文件,添加域名解析
cat <<EOF >>/etc/hosts
> 192.168.148.145 master
> 192.168.148.146 node01
> 192.168.148.147 node02
> EOF
3、关闭防火墙,seLinux和swap
Debian10最小化安装后默认未开启防火墙和seLinux,如有开启的,关闭即可。
#关闭swap
swapoff -a
sed -i 's/.*swap.*/#&/' /etc/fstab
4、配置内核参数,将桥接的IPV4流量传递到iptalbes的链
确保 br_netfilter 模块被加载。这一操作可以通过运行 lsmod | grep br_netfilter 来完成。若要显式加载该模块,可执行 sudo modprobe br_netfilter。
为了让你的 Linux 节点上的 iptables 能够正确地查看桥接流量,你需要确保在你的 sysctl 配置中将 net.bridge.bridge-nf-call-iptables 设置为 1。例如:
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system
5、配置国内Kubernetes源
#添加Kubernetes源
cat <<EOF > /etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
#添加Kubernetes的key
curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
#更新索引文件
apt update
三、软件安装
在所有节点上进行下面操作
1、安装Docker
如果曾安装过docker,先删除:
apt-get remove docker docker-engine docker.io
安装依赖:
apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common
添加Docker的GPG公钥:
curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
添加docker软件仓库:
add-apt-repository \
"deb [arch=amd64] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian \
$(lsb_release -cs) \
stable"
最后安装:
apt-get update
apt-get install docker-ce
安装指定的Docker版本
1、列出仓库存在的版本信息:
apt-cache madison docker-ce
2、安装指定版本,<VERSION_STRING> 替换为实际的版本号,比如:5:19.03.153-0debian-buster
apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io
配置Docker镜像加速
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://0baivyia.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
设置Docker开机启动
systemctl enable docker
修改 Docker Cgroup Driver 为 systemd
Docker 在默认情况下使用的 Cgroup Driver 为 cgroupfs,而 Kubernetes 其实推荐使用 systemd 来代替 cgroupfs,修改Docker 的 Cgroup Driver为systemd:
vim /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
由于前面我们已经在damon.json配置文件里添加了Docker镜像加速器,所以,我们只需把 "exec-opts": ["native.cgroupdriver=systemd"] 增加到配置文件即可,以逗号分隔,格式如下:
{
"registry-mirrors": ["https://0baivyia.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
#重新加载Docker配置文件
systemctl daemon-reload
systemctl restart docker
使用docker info命令查看docker Cgroup Driver已变为了systemd:
root@master:~# docker info
Client:
Debug Mode: false
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 19.03.15
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: systemd
2、安装kubeadm、kubectl、kubelet
apt-get install kubeadm kubectl kubelet
systemctl start kubelet
systemctl enable kubelet
kubelet: 负责与其他节点集群通信,并进行本节点Pod和容器生命周期的管理。
kubeadm: 是kubernets的自动化部署工具,降低了部署难度,提高效率。
kubectl: 是kubernetes集群管理工具
四、初始化Master节点
以下操作只在master节点进行
1、在master节点上进行kubernetes集群初始化
kubeadm init --kubernetes-version=1.20.5 \
> --apiserver-advertise-address=192.168.148.145 \
> --image-repository registry.aliyuncs.com/google_containers \
> --service-cidr=10.1.0.0/16 \
> --pod-network-cidr=10.244.0.0/16
定义Pod网段为10.244.0.0/16,api server地址就是master本机IP地址。
由于kubeadm 默认从官网k8s.grc.io下载所需镜像,国内无法访问,因此需要通过--image-repository制定阿里云镜像仓库地址。
集群初始化完成后返回如下信息,按照提示配置kubectl工具,并记录生成的最后join内容,此内容需要在node节点加入kubernetes集群时执行
#配置kubectl工具
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
#保留此join内容
kubeadm join 192.168.148.145:6443 --token vki75s.swdwgsq1d5ptwhmx \
--discovery-token-ca-cert-hash sha256:f93b1c85e4646b9793d2a7cf52e4e84f3fea812e39ce544ae259f696f77e276b
2、部署flannel网络
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
3、flannel网络部署完成后查看集群状态
kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready control-plane,master 27m v1.20.5
master节点为Ready状态,接下来开始部署node节点
五、部署node节点
以下操作在node节点进行
在所有node节点执行之前记录的join命令,使所有node节点加入Kubernetes集群:
kubeadm join 192.168.148.145:6443 --token vki75s.swdwgsq1d5ptwhmx \
--discovery-token-ca-cert-hash sha256:f93b1c85e4646b9793d2a7cf52e4e84f3fea812e39ce544ae259f696f77e276b
在master节点查看所有节点状态:
kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready control-plane,master 31m v1.20.5
node01 Ready <none> 57s v1.20.5
node02 Ready <none> 53s v1.20.5
集群STATUS状态为Ready时,则说明集群状态正常。
网友评论