一、部署步骤
在所有节点上安装Docker和kubeadm
部署Kubernetes Master
部署容器网络插件
部署 Kubernetes Node,将节点加入Kubernetes集群中
部署 Dashboard Web 页面,可视化查看Kubernetes资源
部署 Harbor 私有仓库,存放镜像资源
二、实验环境
master01 192.168.74.76
node01 192.168.74.74
node02 192.168.74.73
1、所有节点,关闭防火墙规则,关闭selinux,关闭swap交换
```html/xml
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
swapoff -a #交换分区必须要关闭
sed -ri 's/.swap./#&/' /etc/fstab #永久关闭swap分区,&符号在sed命令中代表上次匹配的结果
free -m查看

### 2、修改主机名
```css
hostnamectl set-hostname master01
hostnamectl set-hostname node01
hostnamectl set-hostname node02
//所有节点修改hosts文件
vim /etc/hosts
192.168.74.76 master01
192.168.74.74 node01
192.168.74.73 node02
3、调整内核参数
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
4、docker安装
安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
设置阿里云镜像源
cd /etc/yum.r epos.d/
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#安装docker-ce 社区版
yum install -y docker-ce
#环境配置
vim /etc/selinux/config
SELINUX=disabled
systemctl start docker
systemctl enable docker
5、所有节点配置K8S源
```html/xml
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
### 6、安装 kubelet、kubeadm、kubectl 组件
```html/xml
yum list|grep kube
yum install -y kubelet-1.21.3 kubeadm-1.21.3 kubectl-1.21.3
systemctl enable kubelet
systemctl start kubelet
7、master节点制作
初始化
```html/xml
kubeadm init --apiserver-advertise-address=192.168.74.76 --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers --kubernetes-version v1.21.3 --service-cidr=10.125.0.0/16 --pod-network-cidr=10.244.0.0/16

### 8、创建K8S组件的家目录 提权(必做)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
这个是加入master节点要用的token
kubeadm join 192.168.74.76:6443 --token qv59up.esb0uuxhwbksa4fn \
--discovery-token-ca-cert-hash sha256:9ca76b8e839027e8712ad2a5ee786c5fa797e2a11e874dd192ef91f6cada6a70
### 9、重新生成token
#若token 过期或丢失,需要先申请新的token 令牌
kubeadm token create
#列出token
kubeadm token list | awk -F" " '{print $1}' |tail -n 1
#然后获取CA公钥的的hash值
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^ .* //'
#替换join中token及sha256:
kubeadm join 192.168.74.76:6443 --token qv59up.esb0uuxhwbksa4fn \
--discovery-token-ca-cert-hash sha256:9ca76b8e839027e8712ad2a5ee786c5fa797e2a11e874dd192ef91f6cada6a70
### 10、每个节点加入flannel网络
```javascript
kubectl apply -f \
https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
##或者使用镜像包导入的方式完成flannel的部署
kubectl label node node01 node-role.kubernetes.io/node=node
kubectl label node node02 node-role.kubernetes.io/node=node
三、node节点加入master节点
1、之前复制的toker令牌需要在node节点部署
kubeadm join 192.168.74.76:6443 --token qv59up.esb0uuxhwbksa4fn \
--discovery-token-ca-cert-hash sha256:9ca76b8e839027e8712ad2a5ee786c5fa797e2a11e874dd192ef91f6cada6a70
2、master节点上查看状态
3、解决不健康的节点问题
//如果 kubectl get cs 发现集群不健康,更改以下两个文件
vim /etc/kubernetes/manifests/kube-scheduler.yaml
vim /etc/kubernetes/manifests/kube-controller-manager.yaml
# 修改如下内容
把--bind-address=127.0.0.1变成--bind-address=192.168.80.10 #修改成k8s的控制节点master01的ip
把httpGet:字段下的hosts由127.0.0.1变成192.168.80.10(有两处)
#- --port=0 # 搜索port=0,把这一行注释掉
systemctl restart kubelet
4、测试 pod 资源创建
kubectl create deployment nginx --image=nginx
```html/xml
kubectl describe pod nginx-6799fc88d8-pkntt -n default
可以查看这个pod的事件

### 5、暴露pod对外的端口(暴露端口提供服务)
```html/xml
kubectl expose deployment nginx --port=80 --type=NodePort
6、测试访问
7、扩展3个副本
```html/xml
kubectl scale deployment nginx --replicas=3
