环境介绍
本地三台虚拟机
[root@k8s-2 ~]# uname -aLinux k8s-2 3.10.0-1160.45.1.el7.x86_64 #1 SMP Wed Oct 13 17:20:51 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux[root@k8s-2 ~]# cat /proc/versionLinux version 3.10.0-1160.45.1.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Wed Oct 13 17:20:51 UTC 2021
| IP | hostname | 配置 |
|---|---|---|
| 192.168.216.6(master) | k8s-1 | 2C 2G 15G |
| 192.168.216.7(worker) | k8s-2 | 2C 2G 15G |
| 192.168.216.8(worker) | k8s-3 | 2C 2G 15G |

双网卡 ———> 网卡1 NAT模式 网卡2 仅主机(Host-Only)网络
初始环境
# 修改IP文件
vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
ONBOOT=no ---> 修改为yes
# 重启网络
service network restart
# 更新yum
yum update
# 安装网络工具
yum install -y net-tools wget telnet
# 查看IP
ifconfig
# 修改hostname
sudo hostnamectl set-hostname k8s-1 #每台机器依次修改hostname
# 关闭swap分区
sudo sed -i '/ swap / s/^/#/' /etc/fstab
reboot
# 配置/etc/hosts
127.0.0.1 k8s-1 localhost #当前机器的hostname
::1 k8s-1 localhost #当前机器的hostname
192.168.216.6 k8s-1
192.168.216.7 k8s-2
192.168.216.8 k8s-3
# 同步时间
yum install -y ntpdate
ntpdate ntp.aliyun.com
# 确保虚机不会自动suspend
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
# 安装docker
wget -P /etc/yum.repos.d/ https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce
# 安装kubelet、kubectl
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF
# 将 SELinux 设置为 permissive 模式(相当于将其禁用)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
sudo systemctl enable --now kubelet
vi /etc/sysconfig/docker
OPTIONS = 改为如下:
--selinux-enabled=false
sudo systemctl daemon-reload && sudo systemctl restart docker
echo "1">/proc/sys/net/bridge/bridge-nf-call-iptables
echo "1">/proc/sys/net/bridge/bridge-nf-call-ip6tables
yum install bash-completion -y
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
Master节点
sudo kubeadm init --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=cri --control-plane-endpoint "192.168.216.6:6443" --apiserver-advertise-address=192.168.216.6
#这里会输出加入node节点命令。需要拷贝在worker节点中使用
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
mkdir -p /opt/k8s
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
vi kube-flannel.yml,找到行“--kube-subnet-mgr”,在其下增加如下一行:
“- --iface=enp0s8”(用你的实际网卡名替换enp0s8)
kubectl apply -f ./kube-flannel.yml
# 将Master配置拷贝至Worker节点
scp /etc/kubernetes/admin.conf root@192.168.216.7:/etc/kubernetes/admin.conf
scp /etc/kubernetes/admin.conf root@192.168.216.8:/etc/kubernetes/admin.conf
# 查看安装状态
kubectl get nodes
kubectl get pods --all-namespaces
# 安装helm
cd /opt
wget https://get.helm.sh/helm-v3.7.1-linux-amd64.tar.gz
tar -zxvf helm-v3.7.1-linux-amd64.tar.gz
cp linux-amd64/helm /usr/local/bin
helm version
# 添加仓库
helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo add aliyun https://apphub.aliyuncs.com/
helm repo add bitnami https://charts.bitnami.com/bitnami/
helm repo add azure https://mirror.azure.cn/kubernetes/charts/
Worker节点
kubeadm join 192.168.216.7:6443 --token 10bgpq.vrdm5ytnx880hxjm \
--discovery-token-ca-cert-hash sha256:56381f3d0f71bc14d7fd7c04600a1280fce846110faa88cb3d717b571318dcf1
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
kubectl label node k8s-2 node-role.kubernetes.io/worker=worker
kubectl label node k8s-3 node-role.kubernetes.io/worker=worker
测试安装
# 安装nginx
kubectl create deployment nginx --image=nginx
# 创建service
kubectl expose deployment nginx --port=80 --type=NodePort
# 查看端口
kubectl get pods,svc
NAME READY STATUS RESTARTS AGE
pod/nginx-5c7588df-hrhfh 1/1 Running 0 2m16s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3h6m
service/nginx NodePort 10.97.240.92 <none> 80:30054/TCP 23s
#执行命令看能不能访问到nginx服务
curl http://10.97.240.92/
如果安装错误,清除环境
echo y | kubeadm reset
systemctl stop kubelet
systemctl stop docker
rm -rf /var/lib/cni/
rm -rf /var/lib/kubelet/*
rm -rf /etc/cni/
rm -rf /etc/kubernetes
rm -rf /root/.kube/*
ifconfig cni0 down
ifconfig flannel.1 down
ifconfig docker0 down
ip link delete cni0
ip link delete flannel.1
systemctl restart kubelet
systemctl restart docker
