kubernetes部署文档-超详细

目录

​编辑

基础信息

部署方式:kubeadm

部署要求

环境信息

基础配置

修改主机名

配置主机名解析

配置时间同步

禁用firewalld

禁用selinux

禁用swap分区

配置iptables

常用工具下载

安装配置docker

安装docker

配置docker

部署k8s集群

添加kubernetes阿里云源

安装kubeadm、kubelet、kubectl

初始化kubernetes集群(master)

master节点配置(master)

安装calico网络组件(master)

生成永久token(master)

添加worker节点(worker) 

 安装kubernetes-dashboard(master)

ImagePullBackOff问题解决方案

访问k8s-dashboard界面



基础信息

部署方式:kubeadm

kubeadm 是官方社区推出的一个用于快速部署kubernetes 集群的工具,这个工具能通过两条指令完成一个kubernetes 集群的部署:

  1. kubeadm init   使用该命令可以创建master节点
  2. kubeadm join  使用该命令可以将节点加入集群成为worker节点

官方地址:Kubeadm | Kubernetes

部署要求

  • 集群中所有机器之间网络互通
  • 可以访问外网,需要拉取镜像
  • 无swap分区或禁用swap分区

环境信息

  • kubernetes版本:1.23.5
  • docker版本:20.10.14
  • 物理节点信息:

主机名

角色

操作系统

ip地址

master

master

centos 7.6

172.31.246.16

node1

worker

centos 7.6

172.31.246.17

node2

worker

centos 7.6

172.31.246.20

注:以下部署流程,如无标注master或worker,则为所有节点均需配置

基础配置

修改主机名

#对应节点修改主机名
hostnamectl set-hostname master
hostnamectl set-hostname node1
hostnamectl set-hostname node2

配置主机名解析

#编辑/etc/hosts文件
vim /etc/hosts

#添加如下内容
172.31.246.16 master
172.31.246.17 node1
172.31.246.20 node2

配置时间同步

#编辑chrony配置文件
vim /etc/chrony.conf

#从阿里云ntp服务器同步时间,添加如下内容
server ntp.aliyun.com iburst

#重启chronyd
systemctl restart chronyd

#查看时间源是否配置成功
chronyc sources -v

#查看所有节点时间是否一致
date

禁用firewalld

#关闭firewalld
systemctl stop firewalld

#禁止firewalld开机自启
systemctl disable firewalld

禁用selinux

#临时关闭selinux
setenforce 0

#永久关闭,修改为SELINUX=disabled
vim /etc/selinux/config 

禁用swap分区

swap分区指的是虚拟内存分区,它的作用是物理内存使用完,之后将磁盘空间虚拟成内存来使用,启用swap设备会对系统的性能产生非常负面的影响,因此kubernetes要求每个节点都要禁用swap设备。

#关闭swap分区
swapoff -a

#注释swap分区
vim /etc/fstab

#查看swap分区是否禁用
free

配置iptables

修改内核参数,将桥接的IPv4流量传递到iptables的链

#创建并编辑k8s.conf文件
vim /etc/sysctl.d/k8s.conf

#添加以下内容
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

#重新加载内核参数
sysctl --system

常用工具下载

#已有的会更新到最新版本,没有的下载
yum install vim bash-completion net-tools gcc -y

安装配置docker

kubernetes集群是基于docker容器组成的,所以需要先安装配置docker。

docker安装教程:docker-ce安装教程-阿里巴巴开源镜像站

安装docker

#安装必要的一些系统工具
yum install -y yum-utils device-mapper-persistent-data lvm2

#添加软件源信息
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#指定版本安装Docker-CE

yum -y install docker-ce-20.10.14

配置docker

1、配置阿里云镜像加速器,使用加速器可以提升获取Docker官方镜像的速度,否则可能因连接超时导致镜像拉取失败。

2、systemd是Kubernetes默认的cgroup管理器, cgroupfs是docker默认的cgroup管理器,这样就同时运行有两个cgroup控制管理器, 当资源有压力的情况时,有可能出现不稳定的情况;Kubernetes推荐使用systemd来替代cgroupfs,因此将docker的cgroup管理器改为systemd,若不修改在kubeadm init时有警告提示。

#创建/etc/docker文件夹
mkdir -p /etc/docker

#创建并编辑daemon.json文件,配置镜像加速和systemd
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://fhzep8jf.mirror.aliyuncs.com"],
   "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

#重新加载docker配置文件
systemctl daemon-reload

#重启docker
systemctl restart docker

#设为开机自启
systemctl enable docker

部署k8s集群

添加kubernetes阿里云源

#创建并编辑kubernetes.repo
vim /etc/yum.repos.d/kubernetes.repo

#添加以下内容
[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

安装kubeadm、kubelet、kubectl

kubeadm

kubeadm 是官方社区推出的一个用于快速部署kubernetes 集群的工具,这个工具通过kubeadm init和kubeadm join两条指令快速搭建kubernetes集群。

kubectl

kubectl 是kubernetes集群的命令行管理工具,除此之外还可以通过kubernetes-dashboard管理kubernetes集群。

kubelet

Kubelet 是 Master 节点安插在 Node 节点上的“眼线”,kubernetes通过kubelet来管理worker节点;在 Kubernetes 集群中,在每个 Node 上都会启动一个 kubelet 服务进程。该进程用于处理 Master 下发到本节点的任务,定期向 Master 汇报节点资源的使用情况,管理 Pod 及 Pod 中的容器。

#指定版本下载
yum install kubectl-1.23.5 kubelet-1.23.5  kubeadm-1.23.5  -y

#设置kubelet开机自启,否则kubeadm init时会有警告提示
#此时无需(也无法start)systemctl start kubectl,接下来执行kubectl init时会自动start
systemctl enable kubelet

初始化kubernetes集群(master)

--kubernetes-version=1.23.5

指定要安装的 Kubernetes 版本。

--apiserver-advertise-address=172.31.246.16

指定集群master节点的IP地址,即apiserver所在节点的地址,并告知其他组件、节点apiserver在哪。

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

指定用于 Kubernetes 组件的容器镜像仓库。

--service-cidr=10.10.0.0/16

指定 Kubernetes service的IP地址范围。

--pod-network-cidr=10.122.0.0/16

指定 Kubernetes Pod的IP地址范围。

总的来说,这个命令将初始化一个版本号为1.23.5的kubernetes集群,并将172.31.246.16用作master节点,同时指定service和pod的IP地址范围。

#初始化集群
kubeadm init --kubernetes-version=1.23.5  \
--apiserver-advertise-address=172.31.246.16   \
--image-repository registry.aliyuncs.com/google_containers  \
--service-cidr=10.10.0.0/16 --pod-network-cidr=10.122.0.0/16

开始初始化:

初始化完成:

master节点配置(master)

#如果是非root用户,执行以下三条命令
#创建一个 .kube 目录并将 admin.conf 文件复制到该目录下的 config 文件中,然后更改文件的所有者为当前用户。
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

#root用户,执行以下命令即可通过kubectl管理集群
export KUBECONFIG=/etc/kubernetes/admin.conf

#查看kubernetes节点
kubectl get nodes
#查看所有的pod
kubectl get pods --all-namespaces

如下图所示:此时master处于notready状态,这是因为还未安装网络组件,接下来安装网络组件。

安装calico网络组件(master)

支持kubernetes的网络组件有很多,这里选择calico

kubernetes官网推荐的网络组件:安装扩展(Addons) | Kubernetes

calico官网安装教程:Quickstart for Calico on Kubernetes

#下载calico.yaml文件
curl https://docs.projectcalico.org/v3.18/manifests/calico.yaml -O

#安装calico
kubectl apply -f calico.yaml

calico配置文件: 阿里云盘分享

下载部署calico

等待calico和coredns pod running

calico和coredns pod 已经running,master也变为ready状态

生成永久token(master)

通常使用初始化后给出的命令即可添加worker节点,但但命令有限期只有24小时,因此可以自己重新生成一个永不过期的命令,这样便于后期增加worker节点时直接使用,免去临时重新生成token的步骤。

kubeadm join 172.31.246.16:6443 --token azmi9i.gr7n1zaww51emhw4 \

--discovery-token-ca-cert-hash sha256:e8cc4aefe577e0d8bdfdead977810a7c8bca2b48bbe082c3ed286dcdb5670adb

#查看现有token
kubeadm token list

#创建一个永不过期的token
kubeadm token create --ttl 0

#获取ca证书sha256编码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命令
kubeadm join 172.31.246.16:6443 --token 137xxs.4lsswm85co5399fg \
        --discovery-token-ca-cert-hash sha256:e8cc4aefe577e0d8bdfdead977810a7c8bca2b48bbe082c3ed286dcdb5670adb 

如下图所示为永久token创建过程:

添加worker节点(worker) 

#在所有worker节点运行此命令,即可将节点加入集群
kubeadm join 172.31.246.16:6443 --token 137xxs.4lsswm85co5399fg \
        --discovery-token-ca-cert-hash sha256:e8cc4aefe577e0d8bdfdead977810a7c8bca2b48bbe082c3ed286dcdb5670adb 

如下图所示表示,节点已加入集群:

如下图所示,node1、node2均已加入集群,但node2为notready状态,这是因为node2的组件还在创建中,一段时间后会变为running,时间长短取决于网络等其他系统环境。

如下图所示,两个worker均已ready。

备注:

#worker节点是无法运行kubectl命令的,因为worker节点没有admin.conf文件
#若需在worker节点使用kubectl命令,需要将admin.conf配置文件拷贝到worker节点,再执行以下命令:
scp root@master:/etc/kubernetes/admin.conf /etc/kubernetes/
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
source /etc/profile

 安装kubernetes-dashboard(master)

#下载dashboard的yaml文件
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.1/aio/deploy/recommended.yaml

recommended.yaml文件:阿里云盘分享

#编辑recommended.yaml,找到service段落,做如下修改
#在service里添加nodeport,这样可以通过 <主机ip+port> 来访问dashboard
vim recommended.yaml

kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  type: NodePort  #增加此行,指定service类型为NodePort
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 32333   #增加此行,指定绑定的node的端口(默认的取值范围是:30000-32767), 如果不指定,
会默认分配
  selector:
    k8s-app: kubernetes-dashboard

如下图所示:

#创建danshboard
kubectl create -f recommended.yaml
#查看所有pod
kubectl get pods --all-namespaces

如下图所示,kubernetes-dashboard-fb8648fd9-4sglz这个pod状态为ImagePullBackOff,代表拉取该pod的容器镜像失败

ImagePullBackOff问题解决方案

#查看该pod的详细信息
kubectl describe pod/kubernetes-dashboard-fb8648fd9-4sglz --namespace=kubernetes-dashboard

通过上述命令可以得到如下信息,其中有两个重要信息:

  1. 拉取失败的镜像为:kubernetesui/dashboard:v2.5.1
  2. 该pod被调度到了node1节点

#根据上述信息我们来到node1节点尝试拉取镜像
docker pull kubernetesui/dashboard:v2.5.1

如下图所示,手动拉取失败,原因是2020年开始docker对pull镜像的次数做了限制,所以拉不下来了。

解决办法:

  1. 更换docker镜像加速器
  2. 找一个可以pull的环境,打包镜像,拷贝到node1

这里采用第2种方法。

#找一个可以pull镜像的节点
docker pull kubernetesui/dashboard:v2.5.1

#打包镜像
docker save -o k8s-dashboard.tar kubernetesui/dashboard:v2.5.1

#将镜像包拷贝至node1节点
scp k8s-dashboard.tar root@node1:/root/

#在node1节点导入镜像
docker load  -i /root/k8s-dashboard.tar

如下图所示,master节点可以下载镜像

在node1导入镜像

#由于在recommended.yaml中,默认是拉取镜像直接拉取镜像,而不使用本地镜像,因此需要修改相应参数
#找到deployment段落,修改镜像拉取策略 imagepullpolicy
vim recommended.yaml

镜像拉取策略共有三种:

  1. Always:总是从远程仓库拉取镜像(一直远程下载)
  2. IfNotPresent:本地有则使用本地镜像,本地没有则从远程仓库拉取镜像(本地有就本地 本地没则远程下载)
  3. Never:只使用本地镜像,从不去远程仓库拉取,本地没有就报错 (一直使用本地)

recommended.yaml文件为Always,这里改为Never

#再次部署dashboard,注意此次部署使用的是apply命令,而不是create。

kubectl apply -f recommended.yaml

如图所示,dashboard pod状态为running

此时再看一下该pod创建的过程,可以发现没有再去远程拉取镜像,而是直接使用本地镜像。

访问k8s-dashboard界面

网址:https://主机IP:32333 (三个节点的主机IP均可访问)

#登录方式有两种,这里使用token登录

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

#授权
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin

#获取token信息
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

#token
eyJhbGciOiJSUzI1NiIsImtpZCI6IlBuRGphS0VCaWQ5X1dtZzRTWm1uendhbGJGLUNieXNpeTlfXzZuNURIYWMifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4temhyd24iLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiNjZiNTA3YzAtYmE1ZS00NjJiLTljZDAtOGQ4NWY2OWFiMTc0Iiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbiJ9.q2VEbL4izZVC2phz9UqQWlrHI3Bt3CVJ_BC9W4PN4QBCxacYr2zCf_DYLac0nzLI9rk1TtYbTcwQ4nculIW0-ogoIFCdwAA4lhEb9TDT1yrMMO9WVzO8zm_KvFWuo-qXmM0FKbg4fWPKJIZ18SovSHLGkqjhhAgmqcOd6-u7OxY-XWcbOYy_K7KQX7HOufHcgZV5y1zeJ0Ov8eprHy-Tdo6GNbOQRX2iERGMY9G2AF9giI6nxWXd-e_wk5yg2MZe-egeEV60fzUktd8U1tkck96vDttBTZo5stttq-Woh2lLJHzSxyFiLVCb0W5BuRRHLZdBZEGyB7DdU0pmsQcRCw

获取token

登录

使用rook在kubernetes集群中部署ceph 

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Kubernetes是一个用于管理容器化应用程序的开源系统。它可以自动化和扩展容器应用程序的部署、管理和维护工作。下面是一个简单的步骤,用于在本地环境上部署Kubernetes: 1. 部署Docker Kubernetes使用Docker或其他容器引擎来运行应用程序。因此,第一步是在本地部署Docker。 2. 安装Kubernetes命令行工具 Kubernetes有许多命令行工具,用于管理集群,例如kubectl、kubeadm、kops、kubespray等。根据需要,安装所需的Kubernetes命令行工具。 3. 部署Kubernetes 可以按照Kubernetes官方文档的指导,使用kubeadm工具来快速部署一个单节点的Kubernetes集群。 4. 部署应用程序 可以使用kubectl命令行工具来部署应用程序。可以使用kubectl告诉Kubernetes如何运行应用程序、哪些容器应该运行、容器之间如何通信等。 例如,下面是一个kubectl命令行命令,用于运行一个名为my-app的应用程序: kubectl run my-app --image=my-image 5. 创建服务和负载均衡 可以使用kubectl创建服务和负载均衡器来公开和访问应用程序。服务可以将一组容器分配给一个虚拟IP地址,以便在Kubernetes集群内公开应用程序。 例如,下面是一个kubectl命令行命令,用于创建一个名为my-app的负载均衡器: kubectl expose deployment my-app --type=LoadBalancer --port=80 --target-port=8080 这个命令将创建一个名为my-app的负载均衡器,并将它映射到端口80上,容器内的应用程序运行在8080端口上。 6. 扩展应用程序 使用Kubernetes,可以轻松地扩展应用程序。可以自动添加或删除容器,以便自动扩展应用程序。 例如,下面是一个kubectl命令行命令,用于扩展名为my-app的应用程序到5个副本: kubectl scale deployment my-app --replicas=5 7. 滚动更新和回滚应用程序 Kubernetes提供了滚动更新和回滚应用程序的支持。可以使用kubectl命令行工具来执行滚动更新和回滚应用程序。 例如,下面是一个kubectl命令行命令,用于执行滚动更新: kubectl set image deployment/my-app my-app=my-image:v2 这个命令将更新名为my-app的应用程序的镜像版本为v2。 经过上述步骤,你将可以在本地环境上轻松地部署和管理Kubernetes集群和应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值