使用ssh登录到远程服务器,切换到root账号。
关闭swap
1 | swapoff -a |
修改 /etc/fstab
1
2
3
4
5
6
7
8
9
10
11
12# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
/dev/mapper/cst--01--vg-root / ext4 errors=remount-ro 0 1
# /boot was on /dev/cciss/c0d0p1 during installation
UUID=331095c3-4a02-450c-ad2b-176f2013b4d2 /boot ext2 defaults 0 2
#/dev/mapper/cst--01--vg-swap_1 none swap sw 0 0
#/dev/mapper/cryptswap1 none swap sw 0 0
文件最后一行注释掉。
下载二进制文件
最下面一行是的链接是二进制文件
1.10版本
下载的时候使用了学校的dns服务器发现 storage.googleapis.com 指向了一个内网ip,也就是dns污染。
解决办法:放弃使用学校dns服务器,使用8.8.8.8
修改 /etc/network/interfaces
的 dns-nameservers
一项(ps:使用的是静态ip所以手动配置过这个文件,如果使用DHCP本方法不适用)
1 | tar -xzvf kubernetes.tar.gz # 解压文件 |
去到 kubernetes/server/kubernetes/server/bin
目录把 kubectl
kubelet
kube-proxy
拷贝到 /usr/local/bin
制作证书
下载CFSSL
1 | wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 |
制作CA证书
创建工作目录 /root/ssl
ca-config.json
ca配置
1 | cat > ca-config.json <<EOF |
ca-csr.json
请求签名文件
1 | cat > ca-csr.json << EOF |
1 | cfssl gencert -initca ca-csr.json | cfssljson -bare ca |
ca-key.pem
ca 的 私钥ca.pem
ca 的证书
创建 api-server 使用的证书
1 | cat > kubernetes-csr.json << EOF |
1 | cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json \ |
创建管理员使用的证书
1 | cat > admin-csr.json << EOF |
1 | cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json \ |
创建 kube-proxy 使用的证书
1 | cat > kube-proxy-csr.json << EOF |
1 | cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json \ |
把证书放到指定目录
1 | mkdir /srv/kubernetes |
配置环境变量
1 | export NET_INTERFACE=enp2s2f1 |
note:NET_INTERFACE
需要修改成在使用的网卡
利用 kubeconfig 分发证书
在k8s中分发证书到客户端方便的做法是把证书放到 kubeconfig
文件。
1 | kubectl config set-cluster $CLUSTER_NAME --certificate-authority=$CA_CERT --embed-certs=true --server=https://$MASTER_IP |
生成 kube-proxy 使用的 kubeconfig
1 | export MASTER_IP=`ifconfig | grep -A 1 $NET_INTERFACE | tail -n 1 | awk -F':' '{print $2}' | awk '{print $1}'`:6443 |
生成的 kubeconfig
放到 /var/lib/kube-proxy/
目录下(先创建)
生成 kubelet 使用的 bootstrap-kubeconfig
1 | kubectl config set-cluster kubernetes \ |
生成的 bootstrap.kubeconfig
放到 /etc/kubernetes/ssl/
目录下(先创建)
安装 docker
1 | apt update |
配置 kubelet
1 | mkdir /etc/systemd/system/kubelet.service.d/ |
配置 kube-proxy
1 | mkdir /etc/systemd/system/kube-proxy.service.d |
配置文件说明
以下配置文件出现的ip需要和 master 的ip一致
docker 的 images 版本要与k8s版本一致
配置 etcd
1 | cat > /etc/kubernetes/manifests/etcd.json << EOF |
配置 kube-apiserver
1 | cat > /etc/kubernetes/manifests/kube-apiserver.json << EOF |
配置 kube-controller-manager
1 | cat > /etc/kubernetes/manifests/kube-controller-manager.json << EOF |
配置 kube-scheduler
1 | cat > /etc/kubernetes/manifests/kube-scheduler.json << EOF |
master kubelet 的 kubeconfig
由于集群还没初始化,所以kubelet 的 kubeconfig 使用 kube-proxy 的(node 不需要)。
安装 cni
1 | # 创建 CNI 目录 |
安装 Flannel
1 | kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/kube-flannel.yml |
配置 TLS bootstrapping
1 | # 自动批准 system:bootstrappers 组用户 TLS bootstrapping 首次申请证书的 CSR 请求 |
测试是否自动生成kubelet
的kubeconfig
:删掉kubelet
的kubeconfig
然后重启kubelet
。
1 | kubectl get csr |
可以看到请求自动通过。
kube-dns
可以使用这个
把 __PILLAR__DNS__SERVER__
修改为 10.254.0.2
把 __PILLAR__DNS__DOMAIN__
修改为 kubernetes.default.svc.cluster.local