master01 192.168.230.91
node01 192.168.230.92 docker kubeadm kubectl flannel
node02 192.168.230.93
bash
同步操作
systemctl stop firewalld
setenforce 0
#清空iptables策略
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
#关闭swap交换分区
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
#加载ipvs模块
for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done
#查看时间是否一致
date
#修改主机名
hostnamectl set-hostname master01
hostnamectl set-hostname node01
hostnamectl set-hostname node02
#地址映射
vim /etc/hosts
192.168.230.91 master01
192.168.230.92 node01
192.168.230.93 node02
#master01测试网络连接
ping node01
ping node02
#调整内核参数
cat > /etc/sysctl.d/kubernetes.conf << EOF
#开启网桥模式,可将网桥的流量传递给iptables链
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
#关闭ipv6协议
net.ipv6.conf.all.disable_ipv6=1
net.ipv4.ip_forward=1
EOF
#加载配置文件
sysctl --system
#安装
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce-24.0.1 docker-ce-cli-24.0.1 containerd.io
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://hub.littlediary.cn/"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
}
}
EOF
#重启
systemctl daemon-reload
systemctl restart docker
systemctl enable docker
#拉取镜像
docker pull nginx
#查看当前docker使用的cgroup驱动
docker info | grep "Cgroup Driver"
结果要是:Cgroup Driver: systemd
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
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
#安装
yum install -y kubelet-1.20.15 kubeadm-1.20.15 kubectl-1.20.15
#所有的组件都是以pod的形式运行的,必须要设置开机自启
systemctl enable kubelet
#初始化镜像
kubeadm config images list --kubernetes-version 1.20.15
k8s.gcr.io/pause:3.2
pause:镜像,特殊容器,作用是保持pod当中其他容器的运行
创建pod,首先是拉取镜像,pod当中会有一个pause,pause会在每一个pod中创建一个网络命名空间
pod的生命周期结束,pause容器也会退出,释放该pod的网络命名空间
取消同步操作
#master01初始化kubeadm
kubeadm init \
--apiserver-advertise-address=192.168.230.91 \
#内部通信的ip地址,指向的主,也可以用0.0.0.0表示任意主机
--image-repository registry.aliyuncs.com/google_containers \
#指定镜像的仓库,k8s组件的仓库地址
--kubernetes-version=v1.20.15 \
#k8s版本
--service-cidr=10.96.0.0/16 \
#service网段
--pod-network-cidr=10.244.0.0/16 \
#pod分配的网段,10.244.0.0是flannel默认的网段(可以自定义),calico:192.168.0.0/16
--token-ttl=0
#token永不过期,默认有效期是24小时
kubeadm join 192.168.230.91:6443 --token fnlvgt.7km4bx3rvecoo3ju \
--discovery-token-ca-cert-hash sha256:865596b820a39f71aca3acd48774e54811fa2de64517cbb1ef434ba299f5fc3f
复制到node01、node02
#生成新的token验证
kubeadm token create --print-join-command
#列出集群中所有的节点
kubectl get nodes
同步操作
#设置节点的kubelet
mkdir -p $HOME/.kube
cd /etc/kubernetes
admin.conf
#kubeadm为集群配置的一个具有管理员权限的认证文件,apiserver需要通过admin的认证,kubelet才能和apiserver进行交互
#复制
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
#赋权
chown $(id -u):$(id -g) $HOME/.kube/config
#重启kubelet
cd ~
cd .kube/
systemctl restart kubelet
master01上操作
#编辑kube-proxy的yaml文件,指定命名空间
kubectl edit cm kube-proxy -n=kube-system
mode: "ipvs"
kubectl get node
kubectl get cs
#检查集群的状态
vim /etc/kubernetes/manifests/kube-scheduler.yaml
16、25、39行的ip地址改为192.168.230.91
19行 注释
vim /etc/kubernetes/manifests/kube-controller-manager.yaml
17、37、51行的ip地址改为192.168.230.91
26行 port注释
#查看集群状态为ok
kubectl get cs
将以下包拖到master01、node01、node02
cni-plugins-linux-amd64-v0.8.6.tgz
flannel.tar
kube-flannel.yml
同步操作
#导入镜像
docker load < flannel.tar
取消同步,master01操作
#备份
mv /opt/cni /opt/cni_bak
#创建目录
cd cni_bak/
mkdir -p /opt/cni/bin
#解压
cd /opt
tar -xf cni-plugins-linux-amd64-v0.8.6.tgz -C /opt/cni/bin
#创建配置资源
kubectl apply -f kube-flannel.yml
kubectl get pod -n kube-system
ifconfig