# k8s依赖环境配置
准备了三台ubuntu18 虚拟机
IP | ROTE | Hostname |
---|---|---|
192.168.199.151 | master | master |
192.168.199.152 | worker | worker1 |
192.168.199.153 | worker | worker2 |
# 设置主机名
依次设置各节点主机名
sudo hostnamectl set-hostname master
# 添加本地域名解析
sudo vim /etc/hosts
127.0.0.1 $(hostname)
# 关闭swap交换空间
# 不重启电脑,禁用启用swap,立刻生效
查看内存情况
free -h
停掉所有交换空间
sudo swapoff -a
查看所有的交换空间 如果没有任何输出则说明关成功了
sudo swapon -s
查看内存情况
free -h
# 重新启动电脑,永久禁用Swap
用vim修改/etc/fstab文件,在swap分区这行前加 # 禁用掉,保存退出
sudo vim /etc/fstab
重启节点(如果执行了上一个步骤,那么也可以不用马上重启,因为目前生效了)
sudo reboot
查看内存
free -h
# 关闭 SeLinux
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
# 安装docker
sudo apt update
sudo apt install docker.io -y
# 安装k8s
# Master 额外执行下面命令
创建/etc/sysctl.d/k8s.conf文件,添加如下内容
sudo bash -c "cat > /etc/sysctl.d/k8s.conf" << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
执行命令使修改生效
sudo modprobe br_netfilter
sudo sysctl -p /etc/sysctl.d/k8s.conf
# 各节点安装 kubeadm, kubelet, kubectl
# 更新数据源
sudo apt-get update && sudo apt-get install -y apt-transport-https
# 获取国内数据源库阿里云更新key
sudo curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
# 配置国内数据源阿里云k8s下载路径
sudo bash -c "cat > /etc/apt/sources.list.d/kubernetes.list" << EOF
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
# 安装kubeadm, kubelet, kubectl
sudo apt-get update
sudo apt-get install -y kubelet=1.16.1-00 kubeadm=1.16.1-00 kubectl
# 配置k8s
# 查看kubeadm需要的镜像版本
kubeadm config images list
可以看到kubeadm默认拉去的镜像是从k8s.gcr.io
仓库拉去镜像,但是这个仓库在国外,如果没有科学上网的条件的话可以参考一下,如果可以科学上网(如:用的国外服务器)的可以省略以下步骤
# 制作离线镜像
sudo docker pull mirrorgooglecontainers/kube-apiserver-amd64:v1.16.1
sudo docker pull mirrorgooglecontainers/kube-controller-manager-amd64:v1.16.1
sudo docker pull mirrorgooglecontainers/etcd-amd64:3.3.15-0
sudo docker pull mirrorgooglecontainers/kube-scheduler-amd64:v1.16.1
sudo docker pull mirrorgooglecontainers/kube-proxy-amd64:v1.16.1
sudo docker pull mirrorgooglecontainers/pause:3.1
sudo docker pull coredns/coredns:1.6.2
这里我们通过国内的镜像仓库mirrorgooglecontainers
拉取的镜像,然后通过docker tag将拉下来的镜像名改成k8s.gcr.io下的镜像,这样就可以在kubeadm init能够正常执行了。
sudo docker tag mirrorgooglecontainers/kube-apiserver-amd64:v1.16.1 k8s.gcr.io/kube-apiserver:v1.16.1
sudo docker tag mirrorgooglecontainers/kube-controller-manager-amd64:v1.16.1 k8s.gcr.io/kube-controller-manager:v1.16.1
sudo docker tag mirrorgooglecontainers/kube-scheduler-amd64:v1.16.1 k8s.gcr.io/kube-scheduler:v1.16.1
sudo docker tag mirrorgooglecontainers/kube-proxy-amd64:v1.16.1 k8s.gcr.io/kube-proxy:v1.16.1
sudo docker tag mirrorgooglecontainers/etcd-amd64:3.3.15-0 k8s.gcr.io/etcd:3.3.15-0
sudo docker tag mirrorgooglecontainers/pause:3.1 k8s.gcr.io/pause:3.1
sudo docker tag coredns/coredns:1.6.2 k8s.gcr.io/coredns:1.6.2
可以删除之前拉取的mirrorgooglecontainers
下的重复镜像
sudo docker rmi mirrorgooglecontainers/kube-apiserver-amd64:v1.16.1
sudo docker rmi mirrorgooglecontainers/kube-controller-manager-amd64:v1.16.1
sudo docker rmi mirrorgooglecontainers/etcd-amd64:3.3.15-0
sudo docker rmi mirrorgooglecontainers/kube-scheduler-amd64:v1.16.1
sudo docker rmi mirrorgooglecontainers/kube-proxy-amd64:v1.16.1
sudo docker rmi mirrorgooglecontainers/pause:3.1
sudo docker rmi coredns/coredns:1.6.2
# 初始化Master
注意:以下骤仅在Master节点执行
# kubeadm初始化
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
如果Master初始化成功,那你现在可以大声呼叫 “去吧 皮卡丘!”,看到输出的最后一行,这就是Worker加入Master的命令,这里可以先记下,待会再去Worker节点站斗
sudo kubeadm join 192.168.199.151:6443 --token tearz2.rvquwsv5gd7ds8tn \
--discovery-token-ca-cert-hash sha256:dd0674653ecc31f204a8f81d0eb91a14664a005fb05a61f56532fd977f14c7a4
注意:kubeadm init生成的token有效期只有1天,如果你的node节点在使用kubeadm join时出现如下错误
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'
error execution phase preflight: unable to fetch the kubeadm-config ConfigMap: failed to get config map: Unauthorized
请到master上检查你所使用的token是否有效,kubeadm token list
49y4v3.jxq5w76jj5hh028u <invalid> 2019-04-13T15:00:47-04:00 authentication,signing The default bootstrap token generated by 'kubeadm init'. system:bootstrappers:kubeadm:default-node-token
8jxvj4.5lop20zjbu48h6kl 23h 2019-04-25T10:21:41-04:00 authentication,signing <none> system:bootstrappers:kubeadm:default-node-token
如果token忘记了或者过期了,也不需要担心执行以下命令,生产不过期token
kubeadm token create --print-join-command --ttl 0
# 普通用户使用kubectl
命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
而需要这些配置命令的原因是: Kubernetes 集群默认需要加密方式访问。所以,这几条命令,就是将刚刚部署生成的 Kubernetes 集群的安全配置文件,保存到当前用户的.kube 目录下, kubectl 默认会使用这个目录下的授权信息访问 Kubernetes 集群。
# 部署网络插件
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
现在可以使用kubectl
查看pod状态了
kubectl get pods -n kube-system
# 部署Worker节点
在worker
节点下执行
sudo kubeadm join 192.168.199.151:6443 --token tearz2.rvquwsv5gd7ds8tn \
--discovery-token-ca-cert-hash sha256:dd0674653ecc31f204a8f81d0eb91a14664a005fb05a61f56532fd977f14c7a4
在master
执行,查看worker节点是否成功加入
kubectl get nodes
# kubeadm常用命令
help Help about any command
init Run this command in order to set up the Kubernetes control plane. # master上执行,初始化所有的master组件
join Run this on any machine you wish to join an existing cluster # node上执行,加入master
reset Run this to revert any changes made to this host by 'kubeadm init' or 'kubeadm join'. # 清理 init,join的环境
token Manage bootstrap tokens. # token的增删查
upgrade Upgrade your cluster smoothly to a newer version with this command. # 更新集群
version Print the version of kubeadm
# 感谢大佬
- 国内环境安装k8s (opens new window) chenzhenqi
- 使用 kubeadm 安装 kubernetes v1.16.0 (opens new window) eastonliu
- 国内环境 ubuntu18 安装 k8s (opens new window) 良师益友 jdkhome