环境
Ubuntu 20.04 lts(3台 2核 8G内存,内存很重要,不然拉不起内置pod)
安装时把云设置成mirrors.aliyun.com,并选上shh
可访问外网,内网互通
为了方便操作,本文指令均在root下操作
1.关闭交换分区
##k8s要求关闭交换分区,大概意思好像是有多少硬件,我就用多少,虚拟出来的不要(外文这样说)
swapoff -a
##永久关闭
vi /etc/fstab
##注释swap一行
2.安装docker、kubeadm(使用阿里云)
$ 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
$ apt-get update
$ apt-get install -y docker.io kubeadm
3.修改Docker源
Docker 官方中国区:https://registry.docker-cn.com
网易:http://hub-mirror.c.163.com
中国科技大学:https://docker.mirrors.ustc.edu.cn
增加文件
vi /etc/docker/daemon.json
{
"registry-mirrors":[
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn",
"https://registry.docker-cn.com"
],
"exec-opts":["native.cgroupdriver=systemd"]
}
上述配置顺便修改cgroupfs->systemd(kubeadmin启动时候会检查)
重启服务
service docker restart
查看是否生效
docker info|grep Mirrors -A 3
4.开启docker服务
systemctl enable docker.service
至此,环境已经准备好,可以做以下快照
5.准备配置文件 kubeadm.yaml
##其中版本均为当前最新版
##指定镜像源(imageRepository),来解决k8s内置镜像拉取失败
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
controllerManager:
extraArgs:
horizontal-pod-autoscaler-use-rest-clients: "true"
horizontal-pod-autoscaler-sync-period: "10s"
node-monitor-grace-period: "10s"
apiServer:
extraArgs:
runtime-config: "api/all=true"
kubernetesVersion: "v1.20.0"
imageRepository: index.docker.io/gotok8s
##技巧
##1.可以通过以下指令来查询当前环境使用的版本信息
kubeadm config print init-defaults
##2.通过以下指令确认镜像(确认仓库是否设置成功)
kubeadm config images list --config kubeadm.yml
6.初始化
kubeadm init --config kubeadm.yaml
7.漫长等待(拉镜像,看网速,1、2分钟吧)
8.界面出现
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Alternatively, if you are the root user, you can run:
export KUBECONFIG=/etc/kubernetes/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:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.137.100:6443 --token k1jn8o.0x8900f35dxmk3r9 --discovery-token-ca-cert-hash sha256:94f68e53e9a458b3dabfd715bae2143928aeac0680c3486636bd9b999f0048e4
##恭喜,ok了,关键信息
##1.执行以下三句指令(保存授权信息)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
##保存指令(用于节点加入集群用)
kubeadm join 192.168.137.100:6443 --token k1jn8o.0x8900f35dxmk3r9 --discovery-token-ca-cert-hash sha256:94f68e53e9a458b3dabfd715bae2143928aeac0680c3486636bd9b999f0048e4
9.安装网络插件
##使用指令查看(指定命名空间)
kubectl get pods -n kube-system
##当前需要使用网络的pod是没初始化的
##部署网络插件:
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
## 通过get pods指令查看是否全部启动了
10.其他节点Join
其他节点做完第四步之后,调用join指令即可,稍等一会儿会提示成功,并输出一句指令,让查看状态
Run 'kubectl get nodes' on the control-plane to see this node join the cluster.
注意 该指令是需要在master上执行的
另外,此时在master上执行
kubectl get pods -n kube-system
能看到node的 pods正在初始化
11.enjoy yourself
root@k8s-master-100:/home/darin# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-7b5988dfd8-bnflq 1/1 Running 0 71m
coredns-7b5988dfd8-h7zf6 1/1 Running 0 71m
etcd-k8s-master-100 1/1 Running 0 71m
kube-apiserver-k8s-master-100 1/1 Running 0 71m
kube-controller-manager-k8s-master-100 1/1 Running 0 71m
kube-proxy-mvkwc 1/1 Running 0 2m42s
kube-proxy-w5jqz 1/1 Running 0 71m
kube-scheduler-k8s-master-100 1/1 Running 0 71m
weave-net-44rbm 2/2 Running 0 2m42s
weave-net-j9mdh 2/2 Running 0 6m40s
root@k8s-master-100:/home/darin# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master-100 Ready control-plane,master 72m v1.20.0
k8s-node-101 Ready <none> 3m18s v1.20.0
使用脚本拉Image(在上述方式可行情况下不建议使用)
#原理先到其他仓库拉镜像后改tag,让kubeadm以为本地已经存在,直接使本地
#下面脚本为master需要的镜像,node需要的少一些,可以自己梳理,或者所有机器都拉(反正就用不到而已)
#node也是需要拉了镜像才能调用join
##init_images.sh
set -o errexit
set -o nounset
set -o pipefail
##这里定义版本
KUBE_VERSION=v1.20.0
KUBE_PAUSE_VERSION=3.2
ETCD_VERSION=3.4.13-0
DNS_VERSION=1.7.0
GCR_URL=k8s.gcr.io
##这里就是写你要使用的仓库
DOCKERHUB_URL=gotok8s
##这里是镜像列表
images=(
kube-proxy:${KUBE_VERSION}
kube-scheduler:${KUBE_VERSION}
kube-controller-manager:${KUBE_VERSION}
kube-apiserver:${KUBE_VERSION}
pause:${KUBE_PAUSE_VERSION}
etcd:${ETCD_VERSION}
coredns:${DNS_VERSION}
)
##这里是拉取和改名的循环语句
for imageName in ${images[@]} ; do
docker pull $DOCKERHUB_URL/$imageName
docker tag $DOCKERHUB_URL/$imageName $GCR_URL/$imageName
docker rmi $DOCKERHUB_URL/$imageName
done
网友评论