默认3台服务器都执行
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
setenforce 0 # 临时
# 关闭swap
swapoff -a # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久
# 关闭完swap后,一定要重启一下虚拟机!!!
# 根据规划设置主机名
hostnamectl set-hostname
# 在master添加hosts
cat >> /etc/hosts << EOF
192.168.124.4 k8s-master
192.168.124.5 k8s-node1
192.168.124.6 k8s-node2
EOF
# 将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system # 生效
# 时间同步
yum install ntpdate -y
ntpdate time.windows.com
基础软件需要在三台服务器都执行
在这里,我们将向您介绍Docker的安装方法。但首先,我们需要先安装依赖包。您需要通过使用以下命令安装一些基本软件:
yum install -y yum-utils device-mapper-persistent-data lvm2
然后,您可以使用以下命令来安装Docker:
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
当安装成功时,您可以执行以下命令来更新缓存并安装Docker Community版:
sudo yum update
sudo yum install docker-ce-20.10.5 docker-ce-cli-20.10.5 containerd.io
docker -v
输出 Docker version 20.10.5, build 55c4c88
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.23.6 kubeadm-1.23.6 kubectl-1.23.6
systemctl enable kubelet
# 配置关闭 Docker 的 cgroups,修改 /etc/docker/daemon.json,加入以下内容
"exec-opts": ["native.cgroupdriver=systemd"]
# 重启 docker
systemctl daemon-reload
systemctl restart docker
# 在 Master 节点下执行
kubeadm init \
--apiserver-advertise-address=192.168.124.4 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.6 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
# 安装成功后,复制如下配置并执行
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
分别在 k8s-node1 和 k8s-node2 执行
# 下方命令可以在 k8s master 控制台初始化成功后复制 join 命令
#下面的命令是第3步生成的命令
kubeadm join 192.168.124.4:6443 --token w34ha2.66if2c8nwmeat9o7 --discovery-token-ca-cert-hash sha256:20e2227554f8883811c01edd850f0cf2f396589d32b57b9984de3353a7389477
# 如果初始化的 token 不小心清空了,可以通过如下命令获取或者重新申请
# 如果 token 已经过期,就重新申请
kubeadm token create
# token 没有过期可以通过如下命令获取
kubeadm token list
# 获取 --discovery-token-ca-cert-hash 值,得到值后需要在前面拼接上 sha256:
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \
openssl dgst -sha256 -hex | sed 's/^.* //'
查看node情况,发现都是Notready。是因为网络原因。执行第5步即可。
[root@k8s-master k8s]# kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-master NotReady control-plane,master 22h v1.23.6
k8s-node01 NotReady 22h v1.23.6
k8s-node02 Ready 22h v1.23.6
# 在 master 节点上执行
# 下载 calico 配置文件,可能会网络超时
curl https://docs.projectcalico.org/manifests/calico.yaml -O
# 修改 calico.yaml 文件中的 CALICO_IPV4POOL_CIDR 配置,修改为与初始化的 cidr 相同
# 修改 IP_AUTODETECTION_METHOD 下的网卡名称
# 删除镜像 docker.io/ 前缀,避免下载过慢导致失败
sed -i 's#docker.io/##g' calico.yaml
#执行
kubectl apply -f calico.yaml
[root@k8s-master k8s]# kubectl get pod -n kube-system -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
calico-kube-controllers-74dbdc644f-l95jc 0/1 ContainerCreating 0 2m37s k8s-node02
calico-node-82kwk 0/1 Init:2/3 0 2m37s 192.168.124.5 k8s-node01
calico-node-pcbtl 0/1 Init:ImagePullBackOff 0 2m37s 192.168.124.4 k8s-master
calico-node-v96st 0/1 Init:2/3 0 2m37s 192.168.124.6 k8s-node02
coredns-6d8c4cb4d-jqktl 0/1 ContainerCreating 0 22h k8s-node02
coredns-6d8c4cb4d-rhgsv 0/1 ContainerCreating 0 22h k8s-node02
etcd-k8s-master 1/1 Running 1 (22h ago) 22h 192.168.124.4 k8s-master
kube-apiserver-k8s-master 1/1 Running 1 (22h ago) 22h 192.168.124.4 k8s-master
kube-controller-manager-k8s-master 1/1 Running 1 (22h ago) 22h 192.168.124.4 k8s-master
kube-proxy-2k2n6 1/1 Running 1 (22h ago) 22h 192.168.124.6 k8s-node02
kube-proxy-2kv9q 1/1 Running 1 (22h ago) 22h 192.168.124.5 k8s-node01
kube-proxy-hpjw6 1/1 Running 1 (22h ago) 22h 192.168.124.4 k8s-master
kube-scheduler-k8s-master 1/1 Running 1 (22h ago) 22h 192.168.124.4 k8s-master
#查看报错的pod
[root@k8s-master k8s]# kubectl describe po calico-node-pcbtl -n kube-system
Name: calico-node-pcbtl
Namespace: kube-system
...................省略了信息
Warning Failed 5m58s kubelet Error: ErrImagePull
Normal BackOff 5m57s kubelet Back-off pulling image "calico/cni:v3.26.1"
Warning Failed 5m57s kubelet Error: ImagePullBackOff
Normal Pulling 5m43s (x2 over 6m53s) kubelet Pulling image "calico/cni:v3.26.1"
第5步非常慢,请耐心等待。可以使用docker pull 下载下面的镜像。
执行完之后,再查看node信息
[root@k8s-master k8s]# kubectl get pod -n kube-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-74dbdc644f-l95jc 1/1 Running 0 109m
calico-node-82kwk 1/1 Running 0 109m
calico-node-ps5f8 1/1 Running 0 60m
calico-node-v96st 1/1 Running 0 109m
coredns-6d8c4cb4d-jqktl 1/1 Running 0 24h
coredns-6d8c4cb4d-rhgsv 1/1 Running 0 24h
etcd-k8s-master 1/1 Running 1 (23h ago) 24h
kube-apiserver-k8s-master 1/1 Running 1 (23h ago) 24h
kube-controller-manager-k8s-master 1/1 Running 1 (23h ago) 24h
kube-proxy-2k2n6 1/1 Running 1 (23h ago) 24h
kube-proxy-2kv9q 1/1 Running 1 (23h ago) 24h
kube-proxy-hpjw6 1/1 Running 1 (23h ago) 24h
kube-scheduler-k8s-master 1/1 Running 1 (23h ago) 24h
[root@k8s-master k8s]# kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane,master 24h v1.23.6
k8s-node01 Ready 24h v1.23.6
k8s-node02 Ready 24h v1.23.6
[root@k8s-master k8s]# kubectl create deployment nginx-test --image=nginx
deployment.apps/nginx-test created
[root@k8s-master k8s]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-85b98978db-lgzwl 1/1 Running 0 116s
nginx-test-84b478f9c5-sl8rg 1/1 Running 0 15s
# 暴露端口
[root@k8s-master k8s]# kubectl expose deployment nginx-test --port=80 --type=NodePort
service/nginx-test exposed
# 查看 pod 以及服务信息
[root@k8s-master k8s]# kubectl get pod,svc
NAME READY STATUS RESTARTS AGE
pod/nginx-85b98978db-lgzwl 1/1 Running 0 2m27s
pod/nginx-test-84b478f9c5-sl8rg 1/1 Running 0 46s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 443/TCP 24h
service/nginx NodePort 10.106.211.191 80:30662/TCP 86m
service/nginx-test NodePort 10.103.164.185 80:30393/TCP 15s
[root@k8s-master k8s]#