本文基于截止目前最新的稳定的CoreOS Container Linux和k8s搭建一个master节点和3个工作节点的k8s集群

版本

CoreOS Container Linux: Stable 1967.4.0

K8s: v1.13.3

集群拓扑

|———+————+—————–| | 节点 |hostname | ip | |———|:———–|:—————:| | master | k8s-master | 192.168.123.210 | | node 1 | k8s-node-1 | 192.168.123.211 | | node 2 | k8s-node-2 | 192.168.123.212 | | node 3 | k8s-node-3 | 192.168.123.213 | |=========+============+=================| |———+————+—————–|

安装CoreOS Container Linux

生成密码

cd ~
openssl passwd -1 > cloud-config.yml

然后输入两遍密码

安装配置

修改cloud-config.yml内容如下:

#cloud-config
users:
  - name: 这里是用户名
    passwd: 这里是上一步生成的内容
    groups:
      - sudo
      - docker

yml格式,需要注意空格,复制的时候需要注意一下

验证安装配置

coreos-cloudinit -validate --from-file cloud-config.yml

将CoreOS Container Linux安装到磁盘上

sudo coreos-install -d /dev/sda -C stable -c cloud-config.yml

重启

sudo reboot

重复以上步骤3遍,或者使用模板技术

本文使用的是proxmox虚拟平台,所以,将上述的结果做成了模板。

登录

登录名就是cloud-config.yml中的name和passwd的值

配置时区

sudo timedatectl set-timezone Asia/Shanghai

配置hostname和/etc/hosts文件

在4个机器上使用以下命令设置hostname

sudo hostnamectl set-hostname xxx

在4个机器上编辑/etc/hosts文件

127.0.0.1   localhost k8s-xxx

192.168.123.210 k8s-master
192.168.123.211 k8s-node-1
192.168.123.212 k8s-node-2
192.168.123.213 k8s-node-3

安装k8s集群

master和worker node都需要的步骤

登录 && 切换为root

sudo su

安装Docker

systemctl enable docker && systemctl start docker

安装CNI Plugin

CNI_VERSION="v0.6.0"
mkdir -p /opt/cni/bin
curl -L "https://github.com/containernetworking/plugins/releases/download/${CNI_VERSION}/cni-plugins-amd64-${CNI_VERSION}.tgz" | tar -C /opt/cni/bin -xz

安装crictl

CRICTL_VERSION="v1.11.1"
mkdir -p /opt/bin
curl -L "https://github.com/kubernetes-incubator/cri-tools/releases/download/${CRICTL_VERSION}/crictl-${CRICTL_VERSION}-linux-amd64.tar.gz" | tar -C /opt/bin -xz

安装kubeadm, kubelet, kubectl

RELEASE=v1.13.3
mkdir -p /opt/bin
cd /opt/bin
curl -L --remote-name-all https://storage.googleapis.com/kubernetes-release/release/${RELEASE}/bin/linux/amd64/{kubeadm,kubelet,kubectl}
chmod +x {kubeadm,kubelet,kubectl}

创建k8s服务

curl -sSL "https://raw.githubusercontent.com/kubernetes/kubernetes/${RELEASE}/build/debs/kubelet.service" | sed "s:/usr/bin:/opt/bin:g" > /etc/systemd/system/kubelet.service
mkdir -p /etc/systemd/system/kubelet.service.d
curl -sSL "https://raw.githubusercontent.com/kubernetes/kubernetes/${RELEASE}/build/debs/10-kubeadm.conf" | sed "s:/usr/bin:/opt/bin:g" > /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

安装kubelet守护进程服务

systemctl enable kubelet && systemctl start kubelet

安装master

初始化

kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.13.3 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12

–image-respoitory选项可以解决国内访问google_containers被屏蔽的问题 –pod-network-cidr选项的值10.244.0.0/16不能变化,因为我们使用的是flannel网络插件

退出root用户,以普通用户执行:

上面的命令会输出一些剩下的在master节点需要执行的命令,一定要以普通用户执行!!

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

上面的命令还会输出,这个命令是需要在工作节点以sudo执行的,用于加入集群

kubeadm join ....

安装flannel网络插件

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

验证master安装

在master节点上普通用户权限执行

kubectl get nodes

输出为:

NAME         STATUS   ROLES    AGE   VERSION
k8s-master   Ready    master   15h   v1.13.3

STATUS为Ready表明安装成功

加入工作节点

sudo kubeadm join ...

验证工作节点安装

在master节点上以普通用户权限执行:

kubectl get nodes

输出为:

NAME         STATUS   ROLES    AGE   VERSION
k8s-master   Ready    master   15h   v1.13.3
k8s-node-1   Ready    <none>   14h   v1.13.3
k8s-node-2   Ready    <none>   14h   v1.13.3
k8s-node-3   Ready    <none>   14h   v1.13.3

STATUS为Ready表明安装成功

一些背景知识

  • kubectl命令只能在master上执行,不过可以将master上的/etc/kubernetes/admin.conf拷贝到任意的机器上,比如工作节点或者集群外的电脑,如自己的笔记本电脑上。这样也可以使用kubectl命令了。其实kubectl只是一个master上api server的客户端而已。admin.conf主要是鉴权信息。