k8s系列——部署k8s集群

1 环境准备

1.1 安装操作系统

此处选用centos 7 操作系统进行安装操作。

1.2 关闭防火墙:

systemctl stop firewalld
systemctl disable firewalld

1.3 关闭selinux:

sed -i 's/enforcing/disabled/' /etc/selinux/config 
setenforce 0

1.4 关闭swap:

swapoff -a # 临时关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab  #永久关闭

1.5 修改主机名称

(1) 临时修改主机名

hostname  名字

(2) 添加主机名与IP对应关系(记得设置主机名):

cat /etc/hosts
192.168.28.71 master
192.168.28.72 node1
192.168.28.73 node2

1.6 将桥接的IPv4流量传递到iptables的链

(1)创建 k8s.conf 文件

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF

(2)加载br_netfilter模块

modprobe br_netfilter
lsmod | grep br_netfilter

(3)使以上配置生效

sysctl --system

1.7 系统时间

(1)查看时间

timedatectl status

(2)修改区时

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

(3)安装工具&手动执行对时

yum -y install ntp ntpdate
ntpdate ntp1.aliyun.com #在线环境可以使用

1.8 安装docker-ce

(1)安装Docker-ce源

yum install -y wget && wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

(3)安装Docker-ce

yum -y install docker-ce-20.10.12-3.el7.x86_64

(4)开启自启和启动

systemctl enable docker && systemctl start docker

(5)查看版本

docker --version

2 安装k8s组件

2.1 安装kubeadm、kubelet、kubectl

kubeadm、kubelet、kubectl 集群所有服务器都安装。

(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

(2)安装kubeadm、kubelet、kubectl
由于版本更新频繁,这里指定版本号部署:

yum install -y kubelet-1.23.1-0 kubeadm-1.23.1-0 kubectl-1.23.1-0

(3)设置开机自启

systemctl enable kubelet

(4)清空配置

kubelet reset

2.2 部署Master节点

(1)初始化master

注意修改apiserver-advertise-address值为master的ip。
另外建议将此条命令单独保存为一个脚本,方便后续重置再部署。

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

(2)使kubelet正常工作

普通用户执行

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

root用户执行:

export KUBECONFIG=/etc/kubernetes/admin.conf

以下信息保存备用,添加node节点使用,忘了也没有关系,可以使用命令查看。

kubeadm join 192.168.6.19:6443 --token dnzeik.j4kmojcalxcezr96 \
    --discovery-token-ca-cert-hash sha256:8fb439131e4c8a490c38a0453a37ca897ec34851b70be2c70d19c0a4692161fb

查看命令:

kubeadm token create --print-join-command

(3)解除master节点不能跑pod
默认k8s的master节点是不能跑pod的业务,需要执行以下命令解除限制

kubectl taint node xxx-nodename node-role.kubernetes.io/master-

kubectl taint nodes --all node-role.kubernetes.io/master-

将 Master 恢复成 Master Only 状态

kubectl taint node xxx-nodename node-role.kubernetes.io/master="":NoSchedule

2.3 安装Flannel网络插件(CNI)

可以从下面地址获取到 kube-flannel.yml文件:
github地址

另外这里有一份附件可供参考:
kube-flannel.yml

coredns依赖于网络插件,如果不安装网络插件coredns将一直处于pending状态

部署kube-flannel:

kubectl apply -f kube-flannel.yml

2.4 node节点 加入Kubernetes

在要加入的node节点上执行

kubeadm join 192.168.56.102:6443 --token h573iu.t1al4xn1cq26yll9 \
    --discovery-token-ca-cert-hash sha256:ec895dbb8fc0cd180b8b17e96feefb27ae5a74abe379e01f5d8ddf49b663a394

如果找不到可以在master节点执行以下命令可以获取

kubeadm token create --print-join-command

重置节点的所有配置

安装报错无法解决时可重置,有问题可以尝试重置。

kubeadm reset

2.5 安装ingress-nginx

(1)下载官方默认配置文件
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-0.32.0/deploy/static/provider/cloud/deploy.yaml

github地址:
https://github.com/kubernetes/ingress-nginx/blob/main/deploy/static/provider/cloud/1.23/deploy.yaml

在原文件中,涉及到一个镜像地址,这个地址国内的网络是无法访问的,这里需要特别处理一下。
我选择的是用阿里云的地址替换原来的k8s地址。
https://cr.console.aliyun.com/images/cn-hangzhou/google_containers/nginx-ingress-controller/detail

PS:这里的坑点很多,需要具备对容器编排、pods日志查看能力。

(2)修改配置

type: NodePort //原来是LoadBalancer NodePort只能⽤30000+的端⼝号,ClusterIP 没有限制
#externalTrafficPolicy: Local //注释或者删掉这⾏。

(3)执行部署

kubectl create -f deploy.yaml

(4) 查看结果

kubectl get deployment -n ingress-nginx

(5) 失败重新部署

//部署失败的话,可以先删掉
kubectl delete -f deploy.yaml

//再实⾏命令安装
kubectl apply -f deploy.yaml

暂时先到这里,待续。。。。。


3 相关资料

https://kubernetes.io/zh/docs/concepts/overview/

http://docs.kubernetes.org.cn/232.html

https://www.bookstack.cn/read/kubernetes-practice-guide/troubleshooting-problems-pod-keep-crashloopbackoff.md

你可能感兴趣的:(k8s)