基于ubuntu虚拟机的k8s环境搭建
由于在实验的过程中,在windows上起的虚拟机来模拟master和node节点,太多虚拟机会导致电脑的内存被占满,无法启动更多的虚拟机;因此只使用了两个虚拟机,一个作为master节点,一个作为node节点;
遇到的坑是,虚机的核数需要指定为2,否则后续kubeadm无法初始化成功;这个可以在虚机管理界面中指定;
虚机使用了Ubuntu 16.04.6 LTS版本
搭建环境的节点:
- 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
安装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
所有的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,没有这个文件就创建一个,添加:
这是我在阿里云申请的一个加速地址,然后重启docker:
service docker restart
即可
重启完成后,通过
docker info
按照相同的步骤,在node机器上安装即可:
完成后
kubeadm join 192.168.201.132:6443 --token cfc2cq.kdfrq0wgsx3f58gy \
--discovery-token-ca-cert-hash sha256:18ebde79d8f33313f2a48304b618264798dad9177b9b4755a86bc7bd9f1014c2
加入到集群中;
等待一段时间,
kubectl get no
小工具
- 安装
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 -