本文基于截止目前最新的稳定的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主要是鉴权信息。