CentOS7安装k8s集群
一、安装前准备我准备了三台CentOS7.6 mini虚拟机192.168.3.170master2核4G192.168.3.171node12核4G192.168.3.172node22核4G之前都已安装好了docker 19.03.13二、关闭selinuxsetenforce 0# 临时关闭sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /et
一、安装前准备
我准备了三台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并登录即可看到了,如下图
更多推荐
所有评论(0)