1

基于ubuntu虚拟机的k8s环境搭建

由于在实验的过程中,在windows上起的虚拟机来模拟master和node节点,太多虚拟机会导致电脑的内存被占满,无法启动更多的虚拟机;因此只使用了两个虚拟机,一个作为master节点,一个作为node节点;
遇到的坑是,虚机的核数需要指定为2,否则后续kubeadm无法初始化成功;这个可以在虚机管理界面中指定;
虚机使用了Ubuntu 16.04.6 LTS版本

搭建环境的节点:

image2019-12-12_22-23-27.png

  • sshd的开启
apt install sshd
service sshd start
  • 安装docker

更新ubuntu的apt源索引

sudo apt-get update
  • 安装包允许apt通过HTTPS使用仓库
sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ software-properties-common
  • 添加Docker官方GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  • 设置Docker稳定版仓库
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
  • 添加仓库后,更新apt源索引
sudo apt-get update
  • 安装最新版Docker CE(社区版)
sudo apt-get install docker-ce
  • 检查Docker CE是否安装正确
sudo docker run hello-world

如果安装正确的话,会显示:
image2019-12-12_22-22-37.png

安装k8s

  • 禁用swap

在master和node都执行:

sudo sed -i '/swap/ s/^/#/' 
/etc/fstab sudo swapoff -a

安装k8s相关组件并初始化

  • 安装kubelet,kubeadm,kubectl

添加apt key以及源(在master和node都执行)

sudo apt update && sudo apt install -y apt-transport-https curl curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" >>/etc/apt/sources.list.d/kubernetes.list
  • 安装最新版kubelet(在master和node都执行)
sudo apt update sudo apt install -y kubelet=1.15.2-00 kubeadm=1.15.2-00 kubectl=1.15.2-00
sudo apt-mark hold kubelet=1.15.2-00 kubeadm=1.15.2-00 kubectl=1.15.2-00
  • 安装kubernetes集群(仅master)
sudo kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.15.2 --pod-network-cidr=192.169.0.0/16 | tee /etc/kube-server-key

tips

  • 参数解释:
--image-repository 指定镜像源,指定为阿里云的源;在没添加阿里云的源时,大部分拉取镜像操作都超时了
--kubernetes-version 指定k8s的版本
--pod-network-cidr 指定pod网络地址。设置为内网网段

kubeadm初始化成功后,可以看到输出:

kubeadm join 192.168.201.132:6443 --token cfc2cq.kdfrq0wgsx3f58gy \
--discovery-token-ca-cert-hash sha256:18ebde79d8f33313f2a48304b618264798dad9177b9b4755a86bc7bd9f1014c2

说明master节点初始化成功了;这个验证串,是之后提供给node节点加入到集群中使用的;

然后将k8s配置文件拷贝到默认路径下:

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

这时,可以

kubectl get pods --namespace kube-system

查看当前集群的系统pod情况:
image2019-12-12_22-38-57.png

所有的pods状态为Running,即说明master节点已经初始化成功

其实。。并没有这么一帆风顺;
首先core-dns会初始化失败,是因为/etc/resolve.conf为127.0.1.1回环地址造成;修改/etc/resolve.conf为8.8.8.8
详细可见官方文档:https://coredns.io/plugins/lo...

其次,calico会初始化失败,是因为拉取docker镜像超时了;可配置镜像加速:
vim /etc/docker/daemon.json,没有这个文件就创建一个,添加:
image2019-12-12_22-51-19.png
这是我在阿里云申请的一个加速地址,然后重启docker:

service docker restart

即可

重启完成后,通过

docker info

查看是否修改成功:
image2019-12-12_22-53-56.png
修改成功了;

按照相同的步骤,在node机器上安装即可:
完成后

kubeadm join 192.168.201.132:6443 --token cfc2cq.kdfrq0wgsx3f58gy \
--discovery-token-ca-cert-hash sha256:18ebde79d8f33313f2a48304b618264798dad9177b9b4755a86bc7bd9f1014c2

加入到集群中;

等待一段时间,

kubectl get no

image2019-12-12_22-56-46.png
这样集群就搭建完毕了。

小工具

  • 安装
git clone https://github.com/ahmetb/kubectx
sudo cp kubectx/kube* /usr/local/bin/
  • 使用kubectx快速切换context

列出全部context

kubectx

结果示例

context-cstkylegmzd
kubernetes-admin@kubernetes
  • 切换到指定context
kubectx kubernetes-admin@kubernetes

结果示例

Switched to context "kubernetes-admin@kubernetes".
  • 查看cluster-info
kubectl cluster-info

结果示例

Kubernetes master is running at https://10.0.2.15:6443
KubeDNS is running at https://10.0.2.15:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
 
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

接下来,可以过以下命令在最近使用过的2个context快速切换。

kubectx -

使用kubens快速切换namespace

  • 列出全部namespace
kubens

结果示例(默认是default)

default
kube-public
kube-system
  • 切换到指定namespace
kubens kube-system

结果示例

Context "kubernetes-admin@kubernetes" modified.
Active namespace is "kube-system".
  • 接下来,可以过以下命令在最近使用过的2个namespace快速切换。
kubens -

参考文章:https://www.cnblogs.com/xiao9...


byte
106 声望13 粉丝