Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。
出于学习的目的,搭建一下Kubernetes集群
一、环境设置
1. 环境设置说明
Kubernetes集群可由一个master主机及一个以上(建议至少两个)node主机组成。
本次安装将由master,node-01,node-02三个独立的主机组成,操作系统为ubuntu18.04。
此外,各主机需要预设的环境如下:
(1)借助NTP服务设定各节点时间精确同步
(2)通过DNS完成各节点的主机名称解析
(3)关闭各节点的防火墙服务
(4)各节点禁用所有的Swap设备
2. 设置时钟同步
若节点可直接访问互联网,直接启动ntp服务即可(不想写了,网上一大把,自己去搜吧)
3. 主机名称解析
出于简化配置步骤的目的,本环境使用hosts文件进行各节点名称解析,文件内容如下所示:
10.1.8.4 master
10.1.8.5 node-01
10.1.8.6 node-02
4. 关闭防火墙
systemctl stop firewalld.service
systemctl stop iptables.service
systemctl disable firewalld.service
systemctl disable iptabes.service
备注:因为我的环境并没有任何防火墙保护措施,所以不用操作
5. 禁用Swap设备
swapoff -a # 临时关闭,重启失效
vim /etc/fstab #注释用于挂载Swap设备的所有行
二. 安装程序包(在所有节点上执行)
1. 安装docker
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
apt-get -y update
apt-cache madison <package name> #查看可安装的制定安装包的所有版本
apt-get install docker-ce=5:18.09.9~3-0~ubuntu-bionic #因为部署kubernetes需要指定的docker版本,所以我选择18.09
2. 安装kubenetes
sudo curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
sudo tee /etc/apt/sources.list.d/kubernetes.list <<-'EOF'
deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main
EOF
apt-get install kubectl kubeadm kubelet
三. 初始化master节点
kubeadm init --kubernetes-version="v1.18.0" --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12
命令中的各选项简单说明:
1. --kubernetes-version 用于指定要部署的kubernetes程序版本,它需要与当前kubeadm支持的版本保持一致
2. --pod-network-cidr 用于指定Pod分配使用的网络地址,它通常应该与要部署使用的网络插件(例如flannel、calico等)的默认设定保持一致,10.244.0.0/16是flannel默认使用的网络
3. --service-cidr 用于指定为Service分配使用的网络地址,它有kubernetes管理,默认即为10.96.0.0/1
命令执行完毕后,输出末尾会有如下输出,它提示用户接下来如何操作:
Your Kubernetes control-plane 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/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 10.1.8.4:6443 --token i69ojo.g4cqjaq5i89cl8ad \
--discovery-token-ca-cert-hash sha256:2beb86e31b4bc68df34bc57e1e19d67f65480bd0b86b871df70ef9fb7d624c28
1. 初始化kubectl
kubectl是kube-apiserver命令行客户端程序,实现了除系统部署之外的几乎全部的管理操作,是kubernetes管理员使用最多的命令之一,kubectl需经由API server 认证及授权后才能执行相应的管理操作,kubeadm部署的集群为其生成了一个具有管理员权限的认证配置文件/etc/kubernetes/admin.conf,它可由kubectl通过默认"$HOME/.kube/config"的路径进行加载。
下面复制认证为Kubernetes系统管理员的配置文件至目标用户:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
之后,就可以通过kubectl进行客户端命令测试,并借此了解集群组件的当前状态:
kubectl get componentstatus
NAME STATUS MESSAGE ERROR
scheduler Healthy ok
controller-manager Healthy ok
etcd-0 Healthy {"health":"true"}
2. 添加flannel网络插件
flannel可以在github上找到,执行以下命令:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
随后使用如下命令确认输出结果中的Pod的状态为"Running":
kubectl get pods -n kube-system -l app=flannel
NAME READY STATUS RESTARTS AGE
kube-flannel-ds-amd64-4wxl5 1/1 Running 0 68m
四. 添加节点到集群
在node-01和node-02上执行以下命令:
kubeadm join 10.1.8.4:6443 --token i69ojo.g4cqjaq5i89cl8ad \
--discovery-token-ca-cert-hash sha256:2beb86e31b4bc68df34bc57e1e19d67f65480bd0b86b871df70ef9fb7d624c28
最后执行命令,验证集群个节点状况:
kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 83m v1.18.0
node-01 Ready <none> 83m v1.18.0
node-02 Ready <none> 83m v1.18.0
至此,Kubernetes集群部署完毕!
参考视频:https://www.bilibili.com/video/BV1ib411Y7zz?p=3
flannel网络插件地址:https://github.com/coreos/flannel