一 官网
二 环境说明
1 软件环境
(CSDN创建表格真恶心,如果有方便的方法请私信我,感谢)
软件 | 版本 |
---|---|
操作系统 | Centos 7.9_64 |
Docker | 19-ce |
Kubernets | 1.21 |
2 服务器配置
CPU | 内存 | 硬盘 |
---|---|---|
4C | 4G | 20G |
3 服务器规划
角色 | IP |
---|---|
k8s-master | 192.168.100.101 |
k8s-node1 | 192.168.100.102 |
k8s-node2 | 192.168.100.103 |
三 部署
1 环境准备
# 关闭防火墙
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 # 永久
# 根据规划设置主机名
hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node1
hostnamectl set-hostname k8s-node2
bash
# 在master添加hosts
cat >> /etc/hosts << EOF
192.168.100.101 k8s-master1
192.168.100.102 k8s-node1
192.168.100.103 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
2 安装docker
2.1 安装docker
- 所有主机安装
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum clean all && yum makecache
yum -y install docker-ce-19.03.9 #这里删掉“-19.03.9”将安装最新版本
systemctl enable docker && systemctl start docker && systemctl status docker
2.2 配置加速器
- 所有主机配置
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF
systemctl restart docker && systemctl status docker
docker info |grep https://b9pmyelo.mirror.aliyuncs.com/
3 安装kubeadm
3.1 添加阿里云YUM软件源
- 所有主机配置
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 clean all && yum makecache
3.2 安装kubeadm,kubelet和kubectl
- 所有主机配置
yum install -y kubelet-1.21.0 kubeadm-1.21.0 kubectl-1.21.0 #删除“-1.21.0”安装最新版本
systemctl enable kubelet
3.3 部署Kubernetes Master
- master主机操作
kubeadm init \
--apiserver-advertise-address=192.168.100.101 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.21.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=all
- 参数说明
•–apiserver-advertise-address:集群通告地址,填写master地址
•–image-repository:由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址,如果拉取不了镜像自行更换仓库地址
•–kubernetes-version:K8s版本,与上面安装的一致
•–service-cidr:集群内部虚拟网络,Pod统一访问入口
•–pod-network-cidr:Pod网络,与下面部署的CNI网络组件yaml中保持一致
3.4 回显说明
在执行完master初始化后会有一段回显
- 这里拉取coredns镜像失败了,是因为阿里云仓库的问题,下面会解决
3.5 k8s配置文件环境变量
- master主机操作
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
3.6 node节点加入集群
- node所有主机操作
kubeadm join 192.168.100.101:6443 --token pb4a1l.qtijjalirm8zk82y \
--discovery-token-ca-cert-hash sha256:2d74573ee3429e8fd48b4c85e5027ec88ebecc1b2f4f09a2a8e6c74f8e23c16d
- 重新生成token(这步不需要操作,默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,然后使用回显的命令在node节点操作加入到集群内)
kubeadm token create --print-join-command
验证
- master操作
- STATUS处于“NotReady”状态,是因为没有部署网络组件,如果后续在工作中出现该状态,也可以从网络组件方面排查
[root@k8s-master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master NotReady control-plane,master 8m53s v1.21.0
k8s-node1 NotReady <none> 103s v1.21.0
k8s-node2 NotReady <none> 102s v1.21.0
3.7 部署容器网络(CNI)
- master操作
- 官方yaml,需要翻墙
wget https://docs.projectcalico.org/manifests/calico.yaml
- 百度网盘
链接:https://pan.baidu.com/s/1SrYDhLSUKte0PdgH2_eEeA
提取码:ttbr
--来自百度网盘超级会员V3的分享
kubectl apply -f calico.yaml
注意
下载完后还需要修改里面定义Pod网络"CALICO_IPV4POOL_CIDR",与前面kubeadm init的 --"pod-network-cidr"指定的一样,如果跟我操作一样则不需要修改。
3.8 解决coredns问题
- 在所有节点执行
docker pull registry.aliyuncs.com/google_containers/coredns:1.8.0
docker tag registry.aliyuncs.com/google_containers/coredns:1.8.0 registry.aliyuncs.com/google_containers/coredns/coredns:v1.8.0
3.9 验证集群健康状态
kubectl get node
#全部处于ready状态,集群健康。
NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane,master 37m v1.21.0
k8s-node1 Ready <none> 30m v1.21.0
k8s-node2 Ready <none> 30m v1.21.0
3.10 验证集群可用性
kubectl create deployment nginx --image=nginx
deployment.apps/nginx created
kubectl expose deployment nginx --port=80 --type=NodePort
service/nginx exposed
#查看pod运行在哪个node上
kubectl get pod -o wide
#查看ng暴漏的随机端口
kubectl get svc
#访问地址:http://NodeIP:Port
至此,kubeadm部署完毕