一、安装前准备
我准备了三台CentOS7.6 mini虚拟机
192.168.3.170 master 2核4G
192.168.3.171 node1 2核4G
192.168.3.172 node2 2核4G
之前都已安装好了docker 19.03.13

二、关闭selinux

setenforce 0  # 临时关闭
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config # 永久关闭

三、调整好时间
安装ntpdate程序yum install ntpdate ntp -y
vi /etc/ntp.conf

# 注释以下内容:
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
# 添加以下内容:
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst
server ntp4.aliyun.com iburst
server ntp5.aliyun.com iburst
server ntp6.aliyun.com iburst
server ntp7.aliyun.com iburst

保存并退出
重启服务systemctl start ntpd.service
设为开机启动systemctl enable ntpd.service
设置时区timedatectl set-timezone Asia/Shanghai
将时间写入硬件时钟timedatectl set-local-rtc 0
重启依赖系统时间的服务
systemctl restart rsyslog
systemctl restart crond

四、安装iptables
yum install -y iptables iptables-services
systemctl start iptables && systemctl enable iptables

五、安装ipvs
执行yum install -y conntrack ipvsadm ipset sysstat libseccomp
执行modprobe br_netfilter
执行

cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF

执行

chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules

lsmod | grep -e ip_vs -e nf_conntrack_ipv4

六、将桥接的IPv4流量传递到iptables

cat > /etc/sysctl.d/kubernetes.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1 
EOF

手动加载所有的配置文件,执行sysctl --system

--system的说明
     从所有下列配置文件中加载系统设置
      /run/sysctl.d/*.conf
      /etc/sysctl.d/*.conf
      /usr/local/lib/sysctl.d/*.conf
      /usr/lib/sysctl.d/*.conf
       /lib/sysctl.d/*.conf
       /etc/sysctl.conf

七、设置主机名和IP配置
在170的主机执行hostnamectl set-hostname k8s-master
在171的主机执行hostnamectl set-hostname k8s-node01
在172的主机执行hostnamectl set-hostname k8s-node02
在三台机器上执行添加hosts配置
执行vi /etc/hosts并输入以下配置

192.168.3.170 k8s-master
192.168.3.171 k8s-node01
192.168.3.172 k8s-node02

执行service network restart

八、添加阿里云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=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

九、其它
sysctl -w net.ipv4.ip_forward=1

十、关闭swap
vi /etc/fstab注释掉swap这一行
或用sed -ri 's/.*swap.*/#&/' /etc/fstab永久关闭,保存并退出
需要重启系统reboot

十一、开放相关端口
etcd 2379 2380
master 6443 8472
node 8472
lb 8443

2379用于客户端监听
2380用于节点间内部通信
6443是kube-apiserver组件使用
8443是虚拟IP监听的服务端口
开放端口firewall-cmd --zone=public --add-port=2379/tcp --add-port=2380/tcp --permanent
开放端口firewall-cmd --zone=public --add-port=6443/tcp --add-port=8472/tcp --permanent
开放端口firewall-cmd --zone=public --add-port=8443/tcp --add-port=10250/tcp --permanent
重启防火墙firewall-cmd --reload

十二、为防止出现如下警告
detected “cgroupfs” as the Docker cgroup driver. The recommended driver is “systemd”.
在配置文件里设置使用systemd驱动

cat > /etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}
EOF

重启docker服务systemctl restart docker

十三、3台机器都安装kubeadm、kubelet和kubectl
yum install -y kubectl-1.20.7 kubeadm-1.20.7 kubelet-1.20.7 --nogpgcheck

systemctl enable kubelet

十四、初始化master(在170这台机器执行)

kubeadm init --apiserver-advertise-address=192.168.3.170 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.20.7 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16 

成功后会看到下图,红色框的之后会用到,选复制到一个记事本
在这里插入图片描述
先安装yum install tree -y
再查看生成的配置文件tree /etc/kubernetes/

使用kubectl工具
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可查看到节点

安装Pod网络插件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f kube-flannel.yml

kube-proxy开启 ipvs
kubectl edit cm kube-proxy -n kube-system修改其中的:mode: “ipvs”

批量删除并自动重建kube-proxy
kubectl get pod -n kube-system | grep kube-proxy | awk '{system("kubectl delete pod "$1" -n kube-system")}'
查看生成的ipvs规则ipvsadm -Ln

十五、部署 Node节点
在k8s-node01、k8s-node02上执行

kubeadm join 192.168.3.170:6443 --token i1ikai.iit7zveg7nqkzw2t \
--discovery-token-ca-cert-hash sha256:2befd454c6b9c19965ear01176363f213b03675fdsf3abbda1a993e27d6c65123

过一会之后,在170这个master机子上执行kubectl get nodes可查看到所有节点
在这里插入图片描述
执行kubectl get cs命令来检测组件的运行状态时,报如下错误:
Get “http://127.0.0.1:10251/healthz”: dial tcp 127.0.0.1:10251: connect: connection refused
在这里插入图片描述
编辑/etc/kubernetes/manifests/下的kube-controller-manager.yaml和kube-scheduler.yaml 注释掉对应的port即可
然后在master节点上重启systemctl restart kubelet.service,再查看就都OK了。

十六、部署.net5程序到K8S上
新建一个.net5 的WebMvc程序,新建时勾选docker, 工程取名为WebMvc1
将整个WebMvc1目录通过WinSCP 工具上传到虚拟机中170这台机器的/root目录里。
在终端输入cd /root/WebMvc1进入目录
执行docker build -f /root/WebMvc1/WebMvc1/Dockerfile -t test/webmvc:1.0 .制作镜像,会要几分钟的时间。
完成后,执行docker images可看镜像了,如下图
在这里插入图片描述
我没有放到阿里云或其它仓库,所以就通过docker save从170机器导出,然后通过winscp工具下载到win10中,再通过winscp上传到171和172机器,通过docker load加载镜像。具体可参考我这篇https://blog.csdn.net/junshangshui/article/details/107468331

为了怕出现防火墙相关问题,我直接临时关闭防火墙systemctl stop firewalld

在170机器创建一个镜像为test/webmvc:1.0的部署
kubectl create deployment myweb --image=test/webmvc:1.0
创建service,并通过Service的80端口转发至容器的端口
kubectl expose deployment myweb --port=80 --type=NodePort
查看IP和对外暴露的端口kubectl get svc | grep myweb
执行kubectl get pods -o wide可看到运行在node01即171机器上。
结果为下图
在这里插入图片描述
在171的终端输入docker ps可看到有个名称k8s_webmvc_myweb-85…的容器
在170、171和172的终端执行curl "http://10.1.101.202:80或者curl "http://192.168.3.170:32706"都可收到结果
最后在我的win10浏览器输入http://192.168.3.170:32706也可防问到,如下图
在这里插入图片描述
相关删除命令
kubectl delete services myweb
kubectl delete deployment myweb

十七、安装部署K8S的Dashboard
先下载配置文件

wget https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended.yaml -O ./kubernetes-dashboard.yaml

编辑配置文件vi ./kubernetes-dashboard.yaml只修改下面注释中提到的两处

kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
    name: kubernetes-dashboard
    namespace: kubernetes-dashboard
spec:
  type: NodePort type: NodePort #修改Service为NodePort类型
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 31234  #指定NodePort端口
  selector:
    k8s-app: kubernetes-dashboard

保存并退出
应用kubectl apply -f ./kubernetes-dashboard.yaml
查看信息kubectl get pods,svc -n kubernetes-dashboard

创建service account并绑定默认cluster-admin管理员集群角色
kubectl create serviceaccount dashboard-admin -n kubernetes-dashboard

kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:dashboard-admin

kubectl describe secrets -n kubernetes-dashboard $(kubectl -n kubernetes-dashboard get secret | awk '/dashboard-admin/{print $1}')
复制token到记事本中
在win10机器的浏览器访问https://192.168.3.170:31234,忽略证书报错并继续访问,然后选择token,粘贴刚才的token并登录即可看到了,如下图
在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐