一、安装kubeadm、kubelet和kubectl
(1)添加kubernets apt源公钥文件
有两种方法:
-
直接执行下面命令(需要科学上网)
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add-
-
(无需科学上网)
先:
wget https://raw.githubusercontent.com/EagleChen/kubernetes_init/master/kube_apt_key.gpg
再:
cat kube_apt_key.gpg | apt-key add -
(2)加入kubernetes的官方源
在该文件中,加入kubernetes的官方源
有两种方法:
- 直接操作
vi /etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
可不可以,看包更新是否成功
更新本地包 apt-get update
- 使用镜像
echo "deb [arch=amd64] https://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list
更新本地包 apt-get update
- 使用 aliyun 源
apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
(3)安装工具
apt-get install -y --allow-unauthenticated kubelet kubeadm kubectl
--allow-unauthenticated
可以试试不加。
查看kuberadm 的当前版本
kubeadm version
查看kubectl 的当前版本
kubectl version
查看kubelet当前状态
systemctl status kubelet
二、核心组件镜像下载
下载方式:
- kubeadm 默认从k8s.gcr.io(老版本:gcr.io/google_containers)上下载核心组件镜像
- K8s 1.8之前可以通过KUBE_REPO_PREFIX 指定其他k8s镜像仓库前缀
- 手工将镜像下载到本地主机
采用第三种(手工下载镜像)
1. 先查看kubeadm版本
kubeadm version
2. 再根据查看其所需镜像
kubeadm config images list --kubernetes-version v1.12.3
3. 拉取K8S
的包并打 tag(标签)
拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver-amd64:v1.12.3
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager-amd64:v1.12.3
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler-amd64:v1.12.3
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy-amd64:v1.12.3
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd-amd64:3.2.24
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.2.2
打标签
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler-amd64:v1.12.3 k8s.gcr.io/kube-scheduler:v1.12.3
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager-amd64:v1.12.3 k8s.gcr.io/kube-controller-manager:v1.12.3
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver-amd64:v1.12.3 k8s.gcr.io/kube-apiserver:v1.12.3
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy-amd64:v1.12.3 k8s.gcr.io/kube-proxy:v1.12.3
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1 k8s.gcr.io/pause:3.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.2.2 k8s.gcr.io/coredns:1.2.2
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd-amd64:3.2.24 k8s.gcr.io/etcd:3.2.24
可以删除多余标签
docker rmi $(docker images | grep "^registry.cn-hangzhou.aliyuncs.com")
4. 初始化
kubeadm init --apiserver-advertise-address 10.0.2.15 --pod-network-cidr=192.168.16.0/20
--apiserver-advertise-address
指明用 Master 的哪个 interface 与 Cluster 的其他节点通信。
--pod-network-cidr=
指定 Pod 网络的范围。 Kubernetes 支持多种网络方案,而且不同网络方案对 --pod-network-cidr 有自己的要求
关闭Swap
vi /etc/fstab
把最后的swap分区注释掉
然后重启此节点 reboot now
kubeadm join 10.0.2.15:6443 --token r6yz3v.c35eyym0a7dpgz86 --discovery-token-ca-cert-hash sha256:93d721518f5a4d42a6df0bd5cbcfdbe9ed2f7935cf0efaaace241d10d5cf61f6
三、验证master节点的引导结果
- 设置环境变量
export KUBECONFIG=/etc/kubernetes/admin.conf
查看master 运行情况
kubectl get pods -n kube-system -o wide
四、配置 kubectl
推荐用 Linux 普通用户执行 kubectl (root 会有一些问题)
为 donald 用户配置 kubectl:(donald 是 我这边的用户)
su - donald
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 启动 kubectl 自动补全功能
echo "source < (kubectl completion bash)" >> ~/.bashrc
五、安装集群网络(安装 Pod 网络)
这里选择安装 Weave Net
-
直接安装(可能会出错)
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
-
间接
curl -L "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')" > weave.yaml
vi weave.yaml
添加环境变量
- name : IPALLOC_RANGE
value: 192.168.16.0/20
kubectl apply -f weave.yaml
六、验证
查看master 运行情况
kubectl get pods -n kube-system -o wide
有个疑问?
为嘛我这没有 kube-dns呢?
Kubernetes 1.11已经使用coredns替换了kube-dns
七、参考资料
- 每天5分钟玩转kubernetes
- http://morecoder.com/article/1133743.html
- https://ieevee.com/tech/2018/09/01/kubeadm.html#增加kubernetes-aliyun镜像源
- https://kubethink.com/posts/create-an-on-premises-cluster-in-china-v1-12/