Stone Stone

Kubernetes(K8s)快速部署

in 运维人生 read (118) 文章转载请注明来源!

转载自:https://hazx.hmacg.cn/server/k8s-install.html

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

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

需要用到的组件
先升级一下系统所有组件

yum update

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

安装一些必要组件

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

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

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

防火墙配置端口
控制节点
控制节点(主节点)所需要的端口如下:

协议 端口 服务

TCP    6443    k8s API server
TCP    2379-2380    etcd server client API
TCP    10250    Kubelet API
TCP    10251    kube-scheduler
TCP    10252    kube-controller-manager

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

协议 端口 服务

TCP    10250    Kubelet API
TCP    30000-32767    NodePort Services

配置防火墙策略
你可以使用如下方法快速配置防火墙策略。若您是在实验环境中,嫌麻烦或者减少影响实验的因素,您也可以直接关闭防火墙。(关闭防火墙可以参考《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 --reload

控制节点(主节点)

firewall-cmd --add-service k8s-master --permanent

计算节点(工作节点)

firewall-cmd --add-service k8s-worker --permanent

所有节点 - 重载防火墙

firewall-cmd --reload

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

停止正在使用的 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,这一步在【所有节点】上执行。

添加库

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

添加库

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.1.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.10.10:1080/" "HTTPS_PROXY=http://192.168.10.10:1080/" "NO_PROXY=localhost,127.0.0.1"

将IP及端口修改为你的代理配置。

重载配置并启动 Docker

systemctl daemon-reload
systemctl start docker
systemctl enable docker

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

下载安装组件并初始化
由于涉及下载,所以此步耗时较长,请耐心等待,不要打断。

kubeadm init --pod-network-cidr=10.244.0.0/16

--pod-network-cidr = 容器网络段,可以不修改

上面的命令运行结束后,请记录给出的命令,该命令将用于其他节点加入 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/bc79dd1505b0c8681ece4de4c0d86c5cd2643275/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 值。

本文基于《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权
文章链接:https://blog.66cto.cn/index.php/archives/150/ (转载时请注明本文出处及文章链接)

运维人生
发表新评论
❋该站点已苟活
© 2019 Stone博客 沪ICP备19015953号-1

前篇 后篇
雷姆
拉姆