阅读目录


K8S部署三种方式:

  minikube

     用在测试

  kubeadm部署(主要用在测试线,搭建简单,但现在发展很好也可以用在生产)

  kubeadm是一个K8s部署工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。

  官方地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/

  二进制部署(主要用在生产)

     推荐安装,从github下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群。

     kubeadm降低部署门槛,但屏蔽了很多细节,遇到问题很难排查。如果想更容易可控,推荐使用二进制包部署Kubernetes集群,虽然手动部署麻烦点,期间可以学习很多工作原理,也利于后期维护。

回到顶部

Kubeadm方式搭建

一、准备环境

1.1 服务器要求:

1、三台服务器:1个master:192.168.50.10,2个node:192.168.50.11、192.168.50.13 建议最小硬件配置:2核cpu、2G内存、30G硬盘

2、可以访问外网

3、服务器之间网络互通(在一个网段)

4、安装阿里云yum源(阿里云yum可以下载k8s的flannel组件)

1.2 软件环境:centos7.x_x64、docker-ce v20、k8s v1.22.3

1.3 服务器整体规划

单master集群

二、服务器环境初始化

关闭防火墙(清空防火墙规则)

systemctl stop firewalld

systemctl disable firewalld

关闭selinux(关闭安全机制)

setenforce 0 #临时关闭

sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config #永久

关闭swap(必须关闭)

swapoff -a #临时关闭

sed -ri 's/.*swap.*/#&/' /etc/fstab #永久

设置hostname

192.168.50.10

hostnamectl set-hostname k8s-master

192.168.50.11

hostnamectl set-hostname k8s-node1

192.168.50.13

hostnamectl set-hostname k8s-node2

添加host:(在host文件末尾添加)

cat >> /etc/hosts <<EOF

192.168.50.10 k8s-master

192.168.50.11 k8s-node1

192.168.50.13 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 -y ntpdate

ntpdate us.pool.ntp.org

添加k8s yum源

cat >/etc/yum.repos.d/kubernetes.repo << EOF

[kubernetes]

name=Kubernetes Repo

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

安装kubelet、kubeadm、kubectl

yum install -y kubelet-1.22.3 kubeadm-1.22.3 kubectl-1.22.3

systemctl enable kubelet

三、快速部署K8S集群

master节点

kubeadm init \

--apiserver-advertise-address=192.168.50.10 \

--image-repository registry.aliyuncs.com/google_containers \

--kubernetes-version=v1.22.3 \

--service-cidr=10.96.0.0/12 \

--pod-network-cidr=10.244.0.0/16

kubeadm init的引导过程:

检查系统环境是否满足

下载镜像

为kubelet创建配置文件并启动

为apiserver、etcd生成证书(/etc/kubernetes/pki)

生成连接apiserver的kubeconfig文件

容器启动master组件

将涉及的配置文件存储到configmap

设置master节点不可调度(打污点)

启用boostrap自动为kubelet颁发证书

安装插件:coreDNS、kube-proxy

提示拷贝连接集群的配置文件

拷贝连接集群的配置文件admin.conf:

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

node节点

向集群添加新节点,执行kubeadm init输出的kubeadm join命令:

     kubeadm join kubeadm join 192.168.50.10:6443 --token iukvkm.x2w42yvm5ctlqo5p --discovery-token-ca-cert-hash sha256:650a0636e03ac97de14a61ccc8dc99ebecfac412c16af74a7912968d0a95b3e2

   #如果当时没记下这个命令,可以用kubeadm命令重新生成:kubeadm token create --print-join-command

kubectl get node #查看集群节点状态

kubectl get pods -n kube-system #查看pod状态 -n 指定命名空间

kubectl get ns #查看命名空间

k8s日志位置:/var/log/messages

清空k8s环境:(如果k8s安装出错,想重新安装。master、node都执行)

   kubeadm reset

   systemctl daemon-reload

   systemctl restart kubelet

   iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X

四、安装pod网络插件(CNI) master执行

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

确保能够访问到quay.io这个registry(需要用阿里云yum源才可访问下载)

(如果pod镜像下载失败,可以改成这个镜像地址(在kube-flannel.yml文件中):lizhenliang/flannel:v0.11.0-amd64)

kubectl get pod --all-namespaces //查看pod是否是running状态

kubectl get nodes 查看节点信息

五、部署UI界面(master执行)

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml

默认dashboard只能集群内部访问,修改Service为Nodeport类型,暴露到外部

kind: Service

apiVersion: v1

metadata:

labels:

k8s-app: kubernetes-dashboard

name: kubernetes-dashboard

namespace: kubernetes-dashboard

spec:

type: NodePort

ports:

- port: 443

targetPort: 8443

nodePort: 30001

selector:

k8s-app: kubernetes-dashboard

访问地址:https://192.168.50.10:30001

kubectl get svc -n kubernetes-dashboard #查看命名空间下pod的对外端口等信息

获取登录dashboard的token

kubectl describe secret -n kubernetes-dashboard //详细查看dashboard的token

创建service account并绑定默认cluster-admin管理员集群角色:

kubectl create serviceaccount dashboard-admin -n kube-system #创建账号

kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin #将账号绑定到系统角色上

kubectl descibe secrets -n kube-system dashboard-admin #获取账号产生的token,使用输出的token登录dashboard

替换自签证书:解决k8s UI界面只能在火狐浏览器访问的问题

证书分为:

1、自签证书 cfssl、openssl

2、权威机构颁发,例如赛门铁克、沃通

kubeadm部署

1、删除默认的secret,用自签证书创建新的secret

kubectl delete secret kubernetes-dashboard-certs -n kubernetes-dashboard

kubectl create secret generic kubernetes-dashboard-certs --from-file=/etc/kubernetes/pki/apiserver.key --from-file=/etc/kubernetes/pki/apiserver.crt

2、修改dashboard.yaml文件,在args下面增加证书俩行

args:

- --auto-generate-certificates

- --tls-key-file=apiserver.key

- --tls-cert-file=apiserver.crt

kubectl apply -f kubernetes-dashboard.yaml #让yaml文件生效

测试:创建nginx测试集群

kubectl create deployment nginx --image=nginx #创建pod

kubectl expose deployment nginx --port=80 --type=NodePort #暴露服务

kubectl get deploy,pod,svc #查看资源信息

Logo

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

更多推荐