K8S | 安装
安装k8s前的准备工作
环境
- ubuntu18.04
- docker
关闭 swap
暂时关闭
$ swapoff -a
永久关闭 注释掉这一行
sudo vim /etc/fstab
# /swapfile none swap sw 0 0
重启机器
sudo reboot
docker 的配置
安装完成之后需要进行一些配置,包括 切换docker下载源为国内镜像站 以及 修改cgroups。
cgroups是一个进程隔离工具 docker就是用它来实现容器的隔离的。docker 默认使用的是cgroupfs,而 k8s 也用到了一个进程隔离工具systemd,如果使用两个隔离组的话可能会引起异常,所以我们要把 docker 的也改成systemd。
编辑daemon.json:
sudo vim /etc/docker/daemon.json
{
"registry-mirrors": [
"阿里云加速地址"
],
"exec-opts": [ "native.cgroupdriver=systemd" ]
}
然后:wq保存后重启 docker:
sudo systemctl daemon-reload
sudo systemctl restart docker
安装 k8s
kubelet: k8s 的核心服务
kubeadm: 这个是用于快速安装 k8s 的一个集成工具,我们在master1和worker1上的 k8s 部署都将使用它来完成。
kubectl: k8s 的命令行工具,部署完成之后后续的操作都要用它来执行
#进入root权限/或者使用sudo
# 使得 apt 支持 ssl 传输
sudo apt-get update && sudo apt-get install -y apt-transport-https
# 下载 gpg 密钥
sudo curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
# 添加 k8s 镜像源
sudo cat << EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
# 更新源列表
apt-get update
# 下载 kubectl,kubeadm以及 kubelet 安装固定版本18.0/ 我试过1.18.6的镜像下载不下来
sudo apt install kubeadm=1.18.0-00 kubectl=1.18.0-00 kubelet=1.18.0-00
安装 master 节点
初始化master节点,这一章节只需要在管理节点上配置即可,大致可以分为如下几步:
- 拉去国内镜像- 初始化master节点
- 部署flannel网络- 配置kubectl工具
拉取国内镜像
获取镜像列表
由于官方镜像地址被墙,所以我们需要首先获取所需镜像以及它们的版本。然后从国内阿里的镜像站获取。
kubeadm config images list
脚本获取
images=(
kube-apiserver:v1.18.0
kube-controller-manager:v1.18.0
kube-scheduler:v1.18.0
kube-proxy:v1.18.0
pause:3.2
etcd:3.4.3-0
coredns:1.6.7
)
for imageName in ${images[@]} ; do
docker pull registry.aliyuncs.com/google_containers/$imageName
docker tag registry.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
docker rmi registry.aliyuncs.com/google_containers/$imageName
done
版本要对应。
如果版本对不上
比如kubeadm config images list输出的版本号为v1.18.6,但是安装的k8s版本是v1.18.0,则使用配置
导出配置文件
kubeadm config print init-defaults --kubeconfig ClusterConfiguration > kubeadm.yml
修改配置
# 修改配置为如下内容
apiVersion: kubeadm.k8s.io/v1beta1
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: abcdef.0123456789abcdef
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:
# 修改为主节点 IP
advertiseAddress: 192.168.141.130
bindPort: 6443
nodeRegistration:
criSocket: /var/run/dockershim.sock
name: kubernetes-master
taints:
- effect: NoSchedule
key: node-role.kubernetes.io/master
---
apiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta1
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controlPlaneEndpoint: ""
controllerManager: {}
dns:
type: CoreDNS
etcd:
local:
dataDir: /var/lib/etcd
# 国内不能访问 Google,修改为阿里云
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
# 修改版本号
kubernetesVersion: v1.14.1
networking:
dnsDomain: cluster.local
# 配置成 Calico 的默认网段
podSubnet: "192.168.0.0/16"
serviceSubnet: 10.96.0.0/12
scheduler: {}
---
# 开启 IPVS 模式
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
featureGates:
SupportIPVSProxyMode: true
mode: ipvs
查看和拉取镜像
# 查看所需镜像列表
kubeadm config images list --config kubeadm.yml
# 拉取镜像
kubeadm config images pull --config kubeadm.yml
这样镜像就拉取下来了
初始化 master 节点
如果使用了上面的配置,则使用–config参数 –config=kubeadm.yml
sudo kubeadm init --config=kubeadm.yml
使用kubeadm的init命令就可以轻松的完成初始化,不过需要携带几个参数,如下。先不要直接复制执行,将赋值给–apiserver-advertise-address参数的 ip 地址修改为自己的master主机地址,然后再执行。
sudo kubeadm init \
--apiserver-advertise-address=192.168.84.75 \
--pod-network-cidr=10.244.0.0/16 \
--image-repository=registry.aliyuncs.com/google_containers
--image-repository=googlecontainersmirror
参数含义:
- –apiserver-advertise-address: k8s 中的主要服务apiserver的部署地址,填自己的管理节点 ip- –image-repository: 拉取的 docker 镜像源,因为初始化的时候kubeadm会去拉 k8s 的很多组件来进行部署,所以需要指定国内镜像源,下不然会拉取不到镜像。- –pod-network-cidr: 这个是 k8s 采用的节点网络,因为我们将要使用flannel作为 k8s 的网络,所以这里填10.244.0.0/16就好- –kubernetes-version: 这个是用来指定你要部署的 k8s 版本的,一般不用填,不过如果初始化过程中出现了因为版本不对导致的安装错误的话,可以用这个参数手动指定。- –ignore-preflight-errors: 忽略初始化时遇到的错误,比如说我想忽略 cpu 数量不够 2 核引起的错误,就可以用–ignore-preflight-errors=CpuNum。错误名称在初始化错误时会给出来。
当你看到如下字样是,就说明初始化成功了,请把最后那行以kubeadm join开头的命令复制下来,之后安装工作节点时要用到的,如果你不慎遗失了该命令,可以在master节点上使用
kubeadm token create --print-join-command
命令来重新生成一条。
Your Kubernetes master has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
You can now join any number of machines by running the following on each node
as root:
kubeadm join 192.168.84.75:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:623718f891678481bc0379984756b7d37468343eb9c243cdf51e90209a749a17
如果在初始化过程中出现了任何Error导致初始化终止了,使用kubeadm reset
重置之后再重新进行初始化。
最后两行需要保存下来,kubeadm join ...
是worker节点加入所需要执行的命令.
配置kubectl工具
接下来配置环境, 让当前用户可以执行kubectl命令:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/kubelet.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
执行完成后并不会刷新出什么信息,可以通过下面两条命令测试 kubectl是否可用:
# 查看已加入的节点
sudo kubectl get nodes
# 查看集群状态
sudo kubectl get cs
测试一下: 此处的NotReady
是因为网络还没配置.
$ sudo kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-master NotReady master 3m25s v1.15.3
部署calico网络
下载描述文件
$ sudo wget https://docs.projectcalico.org/v3.8/manifests/calico.yaml
$ cat kubeadm-init.yaml | grep serviceSubnet:
serviceSubnet: 10.96.0.0/12
打开calico.yaml
, 将192.168.0.0/16
修改为10.96.0.0/12
需要注意的是, calico.yaml中的IP和kubeadm-init.yaml需要保持一致, 要么初始化前修改kubeadm-init.yaml, 要么初始化后修改calico.yaml.
执行kubectl apply -f calico.yaml
初始化网络.
此时查看node信息, master的状态已经是Ready
了.
$ sudo kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-master Ready master 15m v1.15.3
子节点加入
在master节点上使用sudo kubeadm token create –print-join-command命令来重新生成一条
Your Kubernetes master has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
You can now join any number of machines by running the following on each node
as root:
kubeadm join 192.168.84.75:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:623718f891678481bc0379984756b7d37468343eb9c243cdf51e90209a749a17
删除节点
卸载节点(drain 翻译排出,此时卸载节点,但是没有删除)
kubectl drain <node_name> --delete-local-data --force --ignore-daemonsets
可通过 sudo kubectl get node 获取 <node_name>
删除节点
kubectl delete node <node_name>
清空init配置,需要在删除的节点上执行
kubeadm reset
--完--
- 原文作者: 留白
- 原文链接: https://zfunnily.github.io/2020/08/k8sinstall/
- 更新时间:2024-04-16 01:01:05
- 本文声明:转载请标记原文作者及链接