1. 目标
通过虚拟机搭建一个kubernetes集群
共3个节点基于ubuntu
2. 组件安装规划
宿主机: win10 vmware-v15
ubuntu=v16.04.1
docker=v18.06
k8s=v1.12.6
3个虚拟机节点=master,node1,node2
系统镜像下载
3. 安装系统环境
因为每个节点都需要安装docker kubeadm…等软件 以及各种配置
所以先创建一个通用的节点u16-base 然后克隆成master,node1,node2节点
以下命令都是以root用户执行
在ubuntu系统安装好后 默认是用户u16用户
3.1. 创建base节点
先创建一个虚拟机节点u16-base安装ubuntu
网络选择桥接 硬盘分配40G 内存分配4G
用户名 u16 密码 1
1
2
3
|
#开启ssh 后期采用xshell连接
apt install openssh-server -y
ufw disable
|
3.1.1. 系统启动时加载ipvs模块
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
cat >> /etc/modules << EOF
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack_ipv4
EOF
#在系统重启后 自动加载
#modprobe -c | grep ip_vs
#如需手动加载 modprobe ip_vs_rr
#lsmod | grep ^ip_vs | awk '{print $1}' | xargs -I {} modprobe {}
|
3.1.2. 停用本地dns配置
1
2
|
#禁掉本机的local-dns
sed -i '/.*dnsmasq.*/ s/^/#/' /etc/NetworkManager/NetworkManager.conf
|
3.1.3. 关闭swap
1
2
3
4
5
6
7
8
|
# 查看swap状态
free -h
# 快速禁用 swapoff -a
# 快速启用 swapon -a
#设置开机不挂载swap
sed -i '/ swap / s/^/#/' /etc/fstab
|
上一步的开机不挂载swap貌似重启后没效果
于是手动删除swap分区
1
2
3
4
5
6
7
8
9
10
11
12
13
|
root@u6-vm:/# swapoff -a
root@u6-vm:/# fdisk -lu
Disk /dev/sda: 40 GiB, 42949672960 bytes, 83886080 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: C93F46DA-C6B4-45D6-910D-4B10DF307AE7
设备 Start 末尾 扇区 Size 类型
/dev/sda1 2048 1050623 1048576 512M EFI System
/dev/sda2 1050624 81885183 80834560 38.6G Linux filesystem
/dev/sda3 81885184 83884031 1998848 976M Linux swap
|
由上一步的检查 分区/dev/sda3为swap分区
现在删掉它
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#命令分别是 fdisk进入磁盘管理 d删除3号分区 w保存修改
root@u6-vm:/# fdisk /dev/sda
Welcome to fdisk (util-linux 2.27.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
命令(输入 m 获取帮助): d
分区号 (1-3, default 3): 3
Partition 3 has been deleted.
w
|
3.1.4. 安装docker
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#安装依赖
apt -y install apt-transport-https ca-certificates curl software-properties-common
#添加docker仓库
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
add-apt-repository -u "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
#安装指定版本docker
apt-cache madison docker-ce
apt install -y docker-ce=$(apt-cache madison docker-ce | grep 18.06 | head -1 | awk '{print $3}')
#配置docker国内加速器
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
EOF
|
3.1.5. 安装k8s基础环境
1
2
3
4
5
6
7
8
9
|
#添加k8s国内镜像仓库
curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
add-apt-repository -u "deb [arch=amd64] https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-$(lsb_release -cs) main"
# 安装指定版本的kube软件
apt-cache madison kubeadm
apt install -y --allow-downgrades kubelet=$(apt-cache madison kubelet | grep 1.12 | head -1 | awk '{print $3}')
apt install -y --allow-downgrades kubectl=$(apt-cache madison kubectl | grep 1.12 | head -1 | awk '{print $3}')
apt install -y kubeadm=$(apt-cache madison kubeadm | grep 1.12 | head -1 | awk '{print $3}')
|
注:
kubelet是k8s的必须组件
kubeadm用于快速安装k8s 通常放在master节点
kubectl 是用来与k8s交互的客户端
查看软件依赖 apt-cache depends kubeadm
master节点不运行pod原因:Taint/Toleration
3.1.6. 拉取k8s镜像
由于国内网络无法连接谷歌的镜像站,因此先将镜像中转到本地
1
2
3
4
5
6
7
8
9
|
cat > pull-k8s-base-img.sh << EOF
for i in `kubeadm config images list`; do
imageName=${i#k8s.gcr.io/}
docker pull registry.aliyuncs.com/google_containers/$imageName
docker tag registry.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
docker rmi registry.aliyuncs.com/google_containers/$imageName
done;
EOF
bash pull-k8s-base-img.sh
|
3.2. 创建3个节点
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
以上步骤完成了基础节点的配置
现在关闭虚拟机 对当前镜像设置快照, 命名为【k8s-base】
在u16-base节点的快照管理器窗口 进行克隆虚拟机
创建3个虚拟机节点 选择快照【k8s-base】
分别命名为 pu6-km pu6-k1 pu6-k2
克隆方法选择【链接克隆】 这样比较快
启动3个节点上分别设置主机名
hostnamectl set-hostname pu6-k1
hostnamectl set-hostname pu6-k2
hostnamectl set-hostname pu6-km
然后节点关机 都拍摄快照
现在k8s集群的3个节点就准备好了
|
4. 安装k8s集群
1
2
3
4
|
集群创建流程
在pu6-km上创建集群 配置网络组件
在pu6-k1 pu6-k2上用命令加入集群
https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-init/
|
4.1. 在master上初始化集群
1
2
3
4
5
6
7
8
|
kubeadm init --apiserver-advertise-address=192.168.88.164 --pod-network-cidr=10.244.0.0/16
#记录下 kubeadm join 。。。的命令
#查看pod情况
kubectl get pods -n kube-system
#初始化后除了coredns以外的pod应该都正常了
#coredns需要在网络组件装好后才能正常工作
|
- –apiserver-advertise-address=master节点的ip
- –pod-network-cidr=网络地址
4.1.1. 重置初始化
当遇到了初始化失败
1
2
3
|
kubeadm reset
rm -rf /var/lib/cni/
rm -f $HOME/.kube/config
|
4.2. 配置kubectl访问参数
2选1 建议:方式2
1
2
3
4
5
6
|
# 方式1
export KUBECONFIG=/etc/kubernetes/admin.conf
# 方式2
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
|
4.3. 安装网络组件
在master上执行
4.3.1. 添加addons 附加组件 -网络组件-flannel
https://github.com/coreos/flannel/releases
选择方案1:flannel
4.3.2. 方案1:flannel
1
2
3
4
5
6
7
8
|
#直接创建
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.11.0/Documentation/kube-flannel.yml
# flannel会在每个节点上都启动一个pod
# curl -o kb-flannel.yml -O -L https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml
#稍等一会后检查状态
kubectl get pods -n kube-system -l app=flannel
|
4.3.3. 方案2:weave
1
2
|
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
kubectl get pods -n kube-system -l name=weave-net
|
4.4. 加入子节点
在node1 node2上执行
1
2
|
#此命令是初始化时打印出来的
kubeadm join 192.168.88.164:6443 --token aga14g.2r7x4x5cyyfaavck --discovery-token-ca-cert-hash sha256:469042aba1cddb9420ad909031742ee6511e7caf80e39f695a15ee2fd4a52e1b
|
在master上检查节点加入情况
4.4.1. 当忘记加入节点的密码时
1
2
3
4
5
6
|
# 6. 方式1
kubeadm token create --print-join-command
# 7. 方式2
token=$(kubeadm token generate)
kubeadm token create $token --print-join-command --ttl=0
|
文章作者
duansheli
上次更新
2019-12-25
(325c7b3)