文章目录
此文首发于我的个人Jekyll博客:zhang0peter的个人博客
这几天在学习K8S的安装和使用,在此记录一下
此文参考了视频教程:两小时Kubernetes(K8S)从懵圈到熟练——大型分布式集群环境捷径部署搭建_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
报错解决在文章最后
安装docker
先安装docker:
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
add-apt-repository "deb https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
apt update && apt install docker-ce
docker run hello-world
安装kubernetes
docker成功运行后配置k8s的更新源,推荐阿里云:
echo "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo gpg --keyserver keyserver.ubuntu.com --recv-keys BA07F4FB #对安装包进行签名
sudo gpg --export --armor BA07F4FB | sudo apt-key add -
sudo apt-get update
关闭虚拟内存
sudo swapoff -a #暂时关闭
nano /etc/fstab #永久关闭,注释掉swap那一行,推荐永久关闭
安装最新版的k8s:
apt-get install kubelet kubeadm kubectl kubernetes-cni
其中kubeadm
用于初始化环境,kubectl
用于操作kubelet
。
设置开机启动:
sudo systemctl enable kubelet && systemctl start kubelet
查看kubectl
版本:
root@ubuntu:/home/ubuntu# kubectl version
Client Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.2", GitCommit:"59603c6e503c87169aea6106f57b9f242f64df89", GitTreeState:"clean", BuildDate:"2020-01-18T23:30:10Z", GoVersion:"go1.13.5", Compiler:"gc", Platform:"linux/amd64"}
The connection to the server localhost:8080 was refused - did you specify the right host or port?
配置k8s集群
刚刚已经装好一台虚拟机的k8s,现在要配置2台额外的虚拟机,总共3台,形成k8s集群。
推荐的做法是直接使用vmware
自带的克隆功能,这样可以免去重装的烦恼。
共3台机器,分别为 master, node1, node2.
配置虚拟机网络
在/etc/hostname
中配置主节点为master,node1为 node1,node2为 node2
配置每台机器的/etc/netplan/50-cloud-init.yaml
,把DHCP的IP改为固定IP:
network:
ethernets:
ens33:
addresses: [192.168.32.134/24]
dhcp4: false
gateway4: 192.168.32.2
nameservers:
addresses: [192.168.32.2]
optional: true
version: 2
修改/etc/hosts
192.168.32.132 master
192.168.32.133 node1
192.168.32.134 node2
重启机器后能互相ping表示配置成功:
ubuntu@node2:~$ ping master
PING master (192.168.32.132) 56(84) bytes of data.
64 bytes from master (192.168.32.132): icmp_seq=1 ttl=64 time=0.837 ms
64 bytes from master (192.168.32.132): icmp_seq=2 ttl=64 time=0.358 ms
配置Master节点的k8s网络
创建工作目录:
mkdir ~/k8s
cd ~/k8s
生成配置文件:
ubuntu@master:~/k8s$ kubeadm config print init-defaults ClusterConfiguration > kubeadm.conf
W0130 00:57:12.673237 9359 validation.go:28] Cannot validate kube-proxy config - no validator is available
W0130 00:57:12.673539 9359 validation.go:28] Cannot validate kubelet config - no validator is available
修改文件kubeadm.conf
中的IP地址
#修改IP地址为master节点的IP地址
localAPIEndpoint:
advertiseAddress: 192.168.32.132
#配置pod地址
networking:
dnsDomain: cluster.local
podSubnet: 10.244.0.0/16
serviceSubnet: 10.96.0.0/12
拉取k8s需要的镜像
由于官方镜像地址被墙,所以我们需要首先获取所需镜像以及它们的版本。然后从国内镜像站获取。
ubuntu@master:~/k8s$ kubeadm config images list --config kubeadm.conf
W0130 01:31:26.536909 15911 validation.go:28] Cannot validate kube-proxy config - no validator is available
W0130 01:31:26.536973 15911 validation.go:28] Cannot validate kubelet config - no validator is available
k8s.gcr.io/kube-apiserver:v1.17.0
k8s.gcr.io/kube-controller-manager:v1.17.0
k8s.gcr.io/kube-scheduler:v1.17.0
k8s.gcr.io/kube-proxy:v1.17.0
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.5
#下载全部当前版本的k8s所关联的镜像
images=( # 下面的镜像应该去除"k8s.gcr.io/"的前缀,版本换成上面获取到的版本
kube-apiserver:v1.17.0
kube-controller-manager:v1.17.0
kube-scheduler:v1.17.0
kube-proxy:v1.17.0
pause:3.1
etcd:3.4.3-0
coredns:1.6.5
)
for imageName in ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done
启动 kubeadm 和 kubelet
镜像拉取完成后启动:
ubuntu@master:~/k8s$ sudo swapoff -a
ubuntu@master