Hazx小屋 Hazx小屋

CentOS7 Kubernetes(K8s)快速部署

in 服务器相关 阅读: 7364 文章转载请注明来源!


  K8s,管理集群容器的平台,个人用户一般用不上,主要面向于企业、多服务器集群使用。由于本人工作原因,接手了K8s相关的任务,学习了和研究了很多东西,整理了一些自己的笔记。下面就分享一下K8s的快速部署方案,从零开始部署的完整方案。

  在开始介绍部署方法前,有这么几点需要注意:

  • 本篇笔记基于CentOS7介绍K8s部署方法
  • 国内网络环境下,请自备梯子
  • K8s对Docker版本有要求,下面会提到
  • K8s最少可以只有1个节点实现,但推荐2个以上(1个控制节点+1个或多个计算节点)
  • 控制节点默认仅用于管理、仅运行和管理相关的核心容器,可手动配置允许运行普通容器
  • 以下笔记中,控制节点=主节点,计算节点=工作节点=用于启动容器的节点

系统基础配置

【系统基础配置】中,除了【防火墙配置端口】需要区分主机外,其他配置需在所有节点主机上执行。

需要用到的组件

先升级一下系统所有组件

yum update

如果有升级kernel内核,重启一下再继续。

安装一些必要组件

yum install -y openssl yum wget vim git lsof net-tools psmisc zlib gzip zip unzip

配置系统代理

给系统配置HTTP代理,挂到你的梯子上。如果服务器在国外,请忽略此步骤。

配置过程请参考《CentOS 系统代理配置》

防火墙配置端口

如果你已经关闭了防火墙,可以跳过配置防火墙这一部分。

控制节点

控制节点(主节点)所需要的端口如下:

协议端口服务
TCP6443k8s API server
TCP2379-2380etcd server client API
TCP10250Kubelet API
TCP10251kube-scheduler
TCP10252kube-controller-manager
TCP10255Read-only Kubelet API
UDP8472flannel

计算节点

计算节点(工作节点)所需要的端口如下,如果你的控制节点也要运行容器,也需要开启这些端口:

协议端口服务
TCP10250Kubelet API
TCP10255Read-only Kubelet API
TCP30000-32767NodePort Services
UDP8472flannel

配置防火墙策略

你可以使用如下方法快速配置防火墙策略。若您是在实验环境中,嫌麻烦或者减少影响实验的因素,您也可以直接关闭防火墙。(关闭防火墙可以参考《Firewall 防火墙的基本操作》

# 所有节点
cd /etc/firewalld/services
wget https://raw.githubusercontent.com/wrightrocket/k8s-firewalld/master/k8s-master.xml
wget https://raw.githubusercontent.com/wrightrocket/k8s-firewalld/master/k8s-worker.xml
firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 1 -i flannel.1 -j ACCEPT -m comment --comment "flannel subnet"
firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 1 -o flannel.1 -j ACCEPT -m comment --comment "flannel subnet"
firewall-cmd --zone=public --add-port=8472/udp --permanent
firewall-cmd --zone=public --add-port=10256/tcp --permanent
firewall-cmd --reload

# 控制节点(主节点)
firewall-cmd --add-service k8s-master --permanent

# 计算节点(工作节点)
firewall-cmd --add-service k8s-worker --permanent

# 所有节点 - 重载防火墙
firewall-cmd --reload

关闭 Swap

K8s必须保持全程Swap关闭,否则会影响容器正常运行。

# 停止正在使用的 swap 分区
# 先到/dev/mapper/目录下确认一下你的swap分区名称
swapoff /dev/mapper/centos-swap

# 删除swap分区文件
rm /dev/mapper/centos-swap

# 配置 fstab
vim /etc/fstab
# 删除以下挂载内容:
# /dev/mapper/centos-swap swap swap default 0 0

关闭 SELinux

setenforce 0
vim /etc/sysconfig/selinux

配置 SELINUX=disabled

给所有节点都配置不同、唯一的主机名

vim /etc/hostname

配置自动时间同步

保持集群间的时间同步是非常必要的。若您的服务器在配置HTTP代理前就能直接访问互联网,您可以忽略此步(系统会自动同步时间)。若您的服务器处在内网中,即不能直接访问互联网,请配置内网NTP时间服务器来同步时间。此方法请暂时自行百度/谷歌吧.. 我有时间会单独写一篇补上...

至此最好再重启一下系统

reboot


安装主要组件

安装kubeadm、kubelet、kubectl,这一步在【所有节点】上执行

# 添加库
# 如果服务器在境内,可以使用下面两个阿里云镜像地址替换掉下面的谷歌镜像地址。
#baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
#gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kube*
EOF

# 安装组件
yum install kubelet kubeadm kubectl --disableexcludes=kubernetes

# 配置 kubelet 开机自启,并启动
systemctl enable kubelet
systemctl start kubelet

# 配置系统
cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system


安装Docker

这一步在【所有节点】上执行。

# 安装必要组件
yum install yum-utils device-mapper-persistent-data lvm2

# 添加库
# 如果服务器在国内,请将下面的地址替换为阿里云镜像:https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

# 升级一下
yum update

# K8s 对 Docker 的版本有要求,查看当前所需的 Docker 版本:https://kubernetes.io/docs/setup/cri/#docker
# 安装 Docker
yum install docker-ce-18.06.2.ce

# 配置守护进程
mkdir /etc/docker
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 代理
# 若服务器在国外,请忽略此步骤。
mkdir -p /etc/systemd/system/docker.service.d
vim /etc/systemd/system/docker.service.d/http-proxy.conf
# 添加内容:
[Service]
Environment="HTTP_PROXY=http://192.168.1.100:1080/"
Environment="HTTPS_PROXY=http://192.168.1.100:1080/"
Environment="NO_PROXY=localhost,127.0.0.1,10.96.0.1,192.168.*"
# 将IP及端口修改为你的代理配置。

# 重载配置并启动 Docker
systemctl daemon-reload
systemctl enable docker
systemctl start docker


初始化控制节点

在【控制节点】上执行这一步。

创建初始化配置文件

kubeadm config print init-defaults > kubeadm-init.yaml

根据实际需求修改默认配置,以下给出示例:(请不要直接复制以下内容,仅在你自己生成的配置文件中修改下面标注的部分!)

apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 【控制节点IP】
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  name: 【控制节点主机名】
  taints:
  - effect: NoSchedule
    key: node-role.kubernetes.io/master
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
  type: CoreDNS
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: k8s.gcr.io
kind: ClusterConfiguration
kubernetesVersion: v1.15.5 #要安装的K8s版本,默认不是最新,可在Kubernetes官网查看版本号
networking:
  dnsDomain: cluster.local
  podSubnet: 10.244.0.0/16 #容器网段,可不修改,若改动此处,在安装flannel后需修改configmap
  serviceSubnet: 10.96.0.0/12 #集群网段,可不修改
scheduler: {}

按照配置版本下载镜像

kubeadm config images pull --config kubeadm-init.yaml

初始化控制节点

kubeadm init --config kubeadm-init.yaml

上面的命令运行结束后,请记录给出的命令,该命令将用于其他节点加入K8s集群。

配置权限

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

安装网络支持组件

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

此步涉及下载,执行命令后可再执行 kubectl get pods -n kube-system 查看 kube-flannel-xxxx 的状态,若为“Running”则安装成功。


其他节点加入集群

若您未允许控制节点用于启动容器,则必须在此时添加至少一个计算节点(工作节点)。

使用【初始化控制节点】步骤结束后程序给出的命令,在所有【计算节点】中执行

其他节点在加入集群时会下载和安装组件,时间较长。可以使用 kubectl get nodes 查看集群状态,若全为“Ready”则为完毕,再进行下面的操作。


启用 Dashboard

此步骤在【控制节点】上执行。

自签证书

# 创建目录
mkdir /etc/kubernetes/pki/dashboard/
cd /etc/kubernetes/pki/dashboard/
# 创建私钥
openssl genrsa -out dashboard.key 2048
# 创建CSR,此步需要填写一些信息
openssl req -new -key dashboard.key -out dashboard.csr
# 从根证书创建 Dashboard 证书
openssl x509 -req -days 365 -in dashboard.csr -CA ../ca.crt -CAkey ../ca.key -set_serial 01 -out dashboard.crt
# 导入证书
kubectl create secret generic kubernetes-dashboard-certs --from-file=/etc/kubernetes/pki/dashboard/ -n kube-system

启用 Dashboard

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml

此步涉及下载,执行命令后可再执行 kubectl get pods -n kube-system 查看 kubernetes-dashboard-xxxx 的状态,若为“Running”则安装成功。

配置 Dashboard 端口

kubectl -n kube-system edit svc kubernetes-dashboard

编辑器用法与 vi / vim 一致。

type: ClusterIP 改为 type: NodePort

保存、退出编辑器后,再使用下列命令查询:

kubectl get svc -n kube-system

在结果中找到 kubernetes-dashboard 一行,后面的“443:xxxxx/TCP”中的“xxxxx”就是 Dashboard 的外部端口了。请记下。

绑定角色

kubectl create clusterrolebinding default --clusterrole=cluster-admin --serviceaccount=kube-system:default --namespace=kube-system

查询默认令牌

kubectl describe sa default -n kube-system
# 将上面这条命令返回结果中的 Tokens 用于下面这条命令
kubectl describe secrets default-token-xxxxxx -n kube-system

记录最终返回结果中的 Token 值,此 Token 值将作为密码在 Dashboard 中登录。


将其它节点加入集群

若K8s集群刚刚创建完成,您此时还要将新主机加入集群,请继续使用【初始化控制节点】步骤结束后程序给出的命令,在所有未加入集群的【计算节点】主机中执行

部署时给出的命令是有过期时间的(15分钟),若超出这个时间,请使用以下方法添加新节点:

在【控制节点】中执行:

# 创建 Token,执行后记录返回的 token 值
kubeadm token create
# 取得HASH值,执行后记录返回的 hash 值
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \
openssl dgst -sha256 -hex | sed 's/^.* //'

在未加入集群的【计算节点】中执行:

kubeadm join --token 创建的token 控制节点的IP:6443 --discovery-token-ca-cert-hash sha256:取得的hash值


开始使用

使用 Dashboard

Dashboard 的链接是:https://任意一个计算节点的IP:端口

  • 任意一个计算节点的IP:就是字面意思,任意一个计算节点的IP,只要是已经加入K8s集群的主机IP即可,无需知道 Dashboard 部署到了哪个节点。
  • 端口:这个端口是前面【配置 Dashboard 端口】步骤中查询到的外部端口
  • 注意必须是 https 协议访问

网页打开后,选择使用【令牌】登录。令牌即【查询默认令牌】步骤中查询到的默认 Token 值。

文章二维码

扫描二维码,在手机上阅读!

linuxcentos7k8skubernetes
最后由Hazx修改于2021-10-20 12:25
博客系统已萌萌哒运行了
© 2024 Hazx. Theme by 泽泽社长.
前篇 后篇
雷姆
拉姆