在虚拟机上安装Kubernetes集群配置
在虚拟机上安装Kubernetes集群配置。
参考于在Linux上使用kubeadm安装Kubernetes,我们将在CentOS 7.3上安装Kubernetes。因为我们想要在多台机器上尝试集群配置,所以我们会在已安装CentOS 7的虚拟机上安装Kubernetes。
虚拟机的配置和之前的旧安装步骤一样。我们会准备1台主节点和3台从节点的虚拟机。
centos-master = 192.168.121.9
centos-minion-1 = 192.168.121.65
centos-minion-2 = 192.168.121.66
centos-minion-3 = 192.168.121.67
请参考我在GitHub上放置的设置文件等内容。
* https://github.com/syunasin/kubernetes/tree/master/setup
环境
主机
* Core i3-4020U处理器(1.9GHz)
* 16GB内存
* CentOS7.3操作系统
虚拟机x4
* 内存1GB
* 硬盘10GB
* CentOS7.3
创建虚拟机
假设 KVM 环境已经创建完成。
以下的操作将在主机上以 root 用户身份执行。
获取CentOS7的DVD映像
# mkdir -p /data/iso
# cd /data/iso
# wget http://ftp.iij.ad.jp/pub/linux/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1611.iso
创建虚拟硬盘
# mkdir -p /data/hdd/kubernetes
# cd /data/hdd/kubernetes
# qemu-img create -f qcow2 centos-master.qcow2 10G
# qemu-img create -f qcow2 centos-minion-1.qcow2 10G
# qemu-img create -f qcow2 centos-minion-2.qcow2 10G
# qemu-img create -f qcow2 centos-minion-3.qcow2 10G
创建虚拟网络 (CJ畅享虚拟网络)
用以下的 XML 创建并配置网络。
<network>
<name>kubenet</name>
<forward mode='nat'>
<nat>
<port start='1024' end='65535'/>
</nat>
</forward>
<bridge name='virbr1' stp='off' delay='0'/>
<ip address='192.168.121.1' netmask='255.255.255.0'/>
</network>
通过以下步骤,将创建一个名为 kubenet 的 192.168.121.* 网络。
# virsh net-define /tmp/kubenet.xml
# virsh net-start kubenet
# virsh net-autostart kubenet
# virsh net-list
创建虚拟机
为了自动安装CentOS,我准备了一个kickstart文件。以下是用于主控端(master)的kickstart文件。请更改IP地址和主机名,以创建一个类似的文件,用于从控端(minion)。
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
# Use graphical install
graphical
# Run the Setup Agent on first boot
firstboot --enable
ignoredisk --only-use=vda
# Keyboard layouts
keyboard --vckeymap=jp --xlayouts='jp'
# System language
lang ja_JP.UTF-8
# Network information
network --bootproto=static --device=eth0 --onboot=on --activate --gateway=192.168.122.1 --ip=192.168.122.9 --nameserver=192.168.122.1 --netmask=255.255.255.0 --noipv6
network --hostname=centos-master
# Root password
rootpw --plaintext root
# System services
#services --enabled="chronyd"
# System timezone
timezone Asia/Tokyo --isUtc
user --groups=wheel --name=kube --password=kube --plaintext --gecos="kube"
# System bootloader configuration
bootloader --location=mbr --boot-drive=vda
autopart --type=lvm
# Partition clearing information
clearpart --all --initlabel --drives=vda
install
reboot
zerombr
text
%packages
@core
@base
%end
%post --log=/root/postinstall.log
yum update -y
%end
执行以下命令,启动主节点的虚拟机。同时,启动3个用于从节点的虚拟机。
需要修改的参数如下:
* –name
* –disk
* –initrd-inject
* –extra-args
# virt-install \
--virt-type kvm \
--name centos-master \
--vcpus 1 \
--cpu host \
--ram 1024 \
--disk path=/data/hdd/kubernetes/master.qcow2 \
--network network:kubenet \
--graphics vnc \
--os-type linux \
--os-variant rhel7 \
--boot hd \
--location /data/iso/CentOS-7-x86_64-DVD-1611.iso \
--initrd-inject /tmp/master-ks.cfg \
--extra-args "inst.ks=file:/master-ks.cfg" \
在安装完成后,有时不需要重新启动。在这种情况下,请从 virt-manager 启动。
# virt-manager
virt-manager が起動したら、仮想マシンを右クリックして起動を選択します。
师傅的设定
我会在主服务器上安装Kubernetes。
登录主掌者账号
从主机登录到master。
用户为kube,密码为kube。
在master上以root用户身份执行kube的安装。
$ ssh kube@192.168.122.9
kube@192.168.122.9's password: kube
$ sudo su -
[sudo] password for kube: kube
#
Kubernetes 仓库的配置
我们要创建 Kubernetes 的 yum 仓库。
请将以下内容保存到 /etc/yum.repos.d/kubernetes.repo 文件中。
# vi /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
“/etc/sysctl.d/k8s.conf” 的配置
请在 /etc/sysctl.d/k8s.conf 文件中进行以下设置。
# vi /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
hosts 文件的配置
在/etc/hosts文件中添加以下内容。
centos-master 192.168.121.9
centos-minion-1 192.168.121.65
centos-minion-2 192.168.121.66
centos-minion-3 192.168.121.67
禁用防火墙
禁用防火墙。
# systemctl stop firewalld
# systemctl disable firewalld
禁用SELinux
由于Kubernetes似乎还不支持SELinux,因此我们将其禁用。
将/etc/sysconfig/selinux中的SELINUX=enforcing更改为SELINUX=disabled。
编辑完成后,请先重新启动。
重新启动完成后,请再次登录并切换为root用户。
# vi /etc/sysconfig/selinux
# reboot
$ ssh kube@192.168.122.9
kube@192.168.122.9's password: kube
$ sudo su -
[sudo] password for kube: kube
#
安装kubernetes。
# setenforce 0
# yum install -y docker kubelet kubeadm kubectl kubernetes-cni
# systemctl enable docker && systemctl start docker
# systemctl enable kubelet && systemctl start kubelet
Kubernetes的初始化
执行 “kubeadm init” 命令。如果安装成功,
您的 Kubernetes 主服务器已成功初始化!
如果失败,可以通过执行 kubeadm reset 命令将状态重置为初始化前的状态。
# kubeadm init
[root@centos-master kube]# kubeadm init
[kubeadm] WARNING: kubeadm is in beta, please do not use it for production clusters.
[init] Using Kubernetes version: v1.6.4
[init] Using Authorization mode: RBAC
[preflight] Running pre-flight checks
[preflight] WARNING: hostname "centos-master" could not be reached
[preflight] WARNING: hostname "centos-master" lookup centos-master on 192.168.121.1:53: no such host
[certificates] Generated CA certificate and key.
[certificates] Generated API server certificate and key.
[certificates] API Server serving cert is signed for DNS names [centos-master kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 192.168.121.9]
[certificates] Generated API server kubelet client certificate and key.
[certificates] Generated service account token signing key and public key.
[certificates] Generated front-proxy CA certificate and key.
[certificates] Generated front-proxy client certificate and key.
[certificates] Valid certificates and keys now exist in "/etc/kubernetes/pki"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/admin.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/kubelet.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/controller-manager.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/scheduler.conf"
[apiclient] Created API client, waiting for the control plane to become ready
[apiclient] All control plane components are healthy after 69.402003 seconds
[apiclient] Waiting for at least one node to register
[apiclient] First node has registered after 2.624214 seconds
[token] Using token: 4b0978.d0855f49cbe81a34
[apiconfig] Created RBAC rules
[addons] Created essential addon: kube-proxy
[addons] Created essential addon: kube-dns
Your Kubernetes master has initialized successfully!
To start using your cluster, you need to run (as a regular user):
sudo cp /etc/kubernetes/admin.conf $HOME/
sudo chown $(id -u):$(id -g) $HOME/admin.conf
export KUBECONFIG=$HOME/admin.conf
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
http://kubernetes.io/docs/admin/addons/
You can now join any number of machines by running the following on each node
as root:
kubeadm join --token 4b0978.d0855f49cbe81a34 192.168.121.9:6443
#
设置环境变量 KUBECONFIG。也将环境变量的设置添加到 /root/.bash_profile。
# export KUBECONFIG=/etc/kubernetes/admin.conf
# vi /root/.bash_profile
因为需要在稍后加入minion时使用,所以请记下以下内容。token会根据环境的不同而异。
kubeadm join --token 4b0978.d0855f49cbe81a34 192.168.121.9:6443
安装 Pod 网络
从 Networking and Network Policy 插件中选择一个网络进行安装。我们这里选择安装 Weave Net。
# kubectl apply -f https://git.io/weave-kube-1.6
确认行动
我会先确认一下主人是否正在运行。
# kubectl get nodes
NAME STATUS AGE VERSION
centos-master Ready 1m v1.6.4
我会确认 pod 是否正在运行。需要一些时间才能达到全部运行状态。
# kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system etcd-centos-master 1/1 Running 0 3m
kube-system kube-apiserver-centos-master 1/1 Running 0 2m
kube-system kube-controller-manager-centos-master 1/1 Running 0 2m
kube-system kube-dns-3913472980-6qlgm 3/3 Running 0 3m
kube-system kube-proxy-7qwjg 1/1 Running 0 3m
kube-system kube-scheduler-centos-master 1/1 Running 0 2m
kube-system weave-net-wdpbh 2/2 Running 0 1m
小黄人的配置
进行minion的设置。以下是minion-1的设置。请同样设置minion-2和minion-3。
小黄人登录了
使用主机登录到 minion-1。
用户名为 kube,密码为 kube。
在 minion-1 上以 root 用户身份安装 kube。
$ ssh kube@192.168.122.65
kube@192.168.122.65's password: kube
$ sudo su -
[sudo] password for kube: kube
#
Kubernetes的安装
请按照主节点的设置,在从节点上执行以下步骤。请参考主节点的步骤。
-
- kubernet のリポジトリの設定
-
- /etc/sysctl.d/k8s.conf の設定
-
- /etc/hosts の設定
-
- ファイアウォールの無効化
-
- SELinux の無効化
- kubernetes のインストール
增加小黄人。
在 Kubernetes 初始化时,执行先前记下的 join 指令。
# kubeadm join --token 4b0978.d0855f49cbe81a34 192.168.121.9:6443
登录主服务器并确认minion-1已经添加成功。需要一段时间来实现Ready,Running状态。
# ssh kube@192.168.122.9
kube@192.168.122.9's password: kube
# sudo su -
[sudo] password for kube: kube
# kubectl get nodes
NAME STATUS AGE VERSION
centos-master Ready 1h v1.6.4
centos-minion-1 Ready 1m v1.6.4
# kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system etcd-centos-master 1/1 Running 1 12m
kube-system kube-apiserver-centos-master 1/1 Running 1 12m
kube-system kube-controller-manager-centos-master 1/1 Running 1 12m
kube-system kube-dns-3913472980-6qlgm 3/3 Running 0 17m
kube-system kube-proxy-27c8w 1/1 Running 0 59s
kube-system kube-proxy-7qwjg 1/1 Running 1 17m
kube-system kube-scheduler-centos-master 1/1 Running 1 12m
kube-system weave-net-pvqf3 2/2 Running 0 59s
kube-system weave-net-wdpbh 2/2 Running 0 6m
确认集群配置
当您安装了Master和Minion后,最终的配置将如下所示。在Master上执行操作。
# kubectl get nodes
NAME STATUS AGE VERSION
centos-master Ready 38m v1.6.4
centos-minion-1 Ready 22m v1.6.4
centos-minion-2 Ready 10m v1.6.4
centos-minion-3 Ready 1m v1.6.4
# kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system etcd-centos-master 1/1 Running 1 33m
kube-system kube-apiserver-centos-master 1/1 Running 1 33m
kube-system kube-controller-manager-centos-master 1/1 Running 1 33m
kube-system kube-dns-3913472980-6qlgm 3/3 Running 0 38m
kube-system kube-proxy-1g22c 1/1 Running 0 10m
kube-system kube-proxy-27c8w 1/1 Running 0 22m
kube-system kube-proxy-29q4c 1/1 Running 0 1m
kube-system kube-proxy-7qwjg 1/1 Running 1 38m
kube-system kube-scheduler-centos-master 1/1 Running 1 33m
kube-system weave-net-0dvs3 2/2 Running 1 10m
kube-system weave-net-kjlj5 2/2 Running 1 1m
kube-system weave-net-pvqf3 2/2 Running 1 22m
kube-system weave-net-wdpbh 2/2 Running 0 28m
仪表盘的安装
在主服务器上安装显示Pod列表等的仪表板。
以下所有操作都在主服务器上执行。
安裝儀表板。
# kubectl create -f https://git.io/kube-dashboard
安装 nginx
为了从主机访问仪表盘,我们将安装nginx。我认为如果进行Kubernetes认证设置,可以直接连接到主服务的API服务器并显示仪表盘,但是我不知道如何进行设置。
需要在/etc/yum.repo.d/nginx.repo中配置nginx仓库。
# vi /etc/yum.repo.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
安装Nginx。
# yum install -y nginx
将反向代理设置添加到nginx配置中。
在/etc/nginx/nginx.conf的http设置中添加以下内容。
server {
listen 18001;
location / {
proxy_pass http://localhost:8001;
}
}
启动nginx。
# systemctl start nginx
# systemctl enable nginx
启动 Kubernetes 的代理。在前台运行。
# kube proxy
Starting to serve on 127.0.0.1:8001
当以这种状态,通过主机浏览器访问 http://192.168.121.9:18001/ui,将显示仪表盘。
请以中国本土的方式重述以下内容,只需提供一个选项:
参考 -> 参考一下
-
- https://kubernetes.io/docs/getting-started-guides/kubeadm/
-
- https://kubernetes.io/docs/getting-started-guides/centos/centos_manual_config/
- https://github.com/kubernetes/dashboard