k8s v1.17.3 安装
参考了:https://blog.csdn.net/liukuan73/article/details/83116271?utm_source=blogxgwz3https://www.cnblogs.com/cloudnative/p/12979825.htmlhttps://blog.csdn.net/shykevin/article/details/988110211. 准备工作1.1 环境
参考了:
https://blog.csdn.net/liukuan73/article/details/83116271?utm_source=blogxgwz3
https://www.cnblogs.com/cloudnative/p/12979825.html
https://blog.csdn.net/shykevin/article/details/98811021
1. 准备工作
1.1 环境信息
操作系统:Ubuntu 16.04 LTS
1.2 关闭防火墙
$ sudo ufw disable
1.3 禁用SELINUX
ubuntu默认不安装selinux,假如安装了的话,按如下步骤禁用selinux
临时禁用(重启后失效)
$ sudo setenforce 0 #0代表permissive 1代表enforcing
永久禁用
$ sudo vi /etc/selinux/config
SELINUX=permissive
1.4 开启数据包转发
1.4.1 内核开启ipv4转发
1.修改/etc/sysctl.conf,开启ipv4转发:
$ sudo vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 #开启ipv4转发,允许内置路由
2.写入后执行如下命令生效:
$ sudo sysctl -p
1.4.2 防火墙修改FORWARD链默认策略
数据包经过路由后,假如不是发往本机的流量,下一步会走iptables的FORWARD链,而docker从1.13版本开始,将FORWARD链的默认策略设置为DROP,会导致出现一些例如跨主机的两个pod使用podIP互访失败等问题。解决方案有2个:
在所有节点上开机启动时执行iptables -P FORWARD ACCEPT
让docker不操作iptables
方案一:
临时生效:
$ sudo iptables -P FORWARD ACCEPT
iptables的配置重启后会丢失,可以将配置写进/etc/rc.local中,重启后自动执行:
/usr/sbin/iptables -P FORWARD ACCEPT
方案二:
设置docker启动参数添加–iptables=false选项,使docker不再操作iptables,比如1.10版以上可编辑docker daemon默认配置文件/etc/docker/daemon.json:
{
"iptables": false
}
1.5 禁用swap
1.禁掉所有的swap分区
$ sudo swapoff -a
- 同时还需要修改/etc/fstab文件,注释掉 SWAP 的自动挂载,防止机子重启后swap启用。
1.6 配置iptables参数,使得流经网桥的流量也经过iptables/netfilter防火墙
$ sudo tee /etc/sysctl.d/k8s.conf <<-'EOF'
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
$ sudo sysctl --system
2. 安装docker
2.1 安装Docker 19.03
安装基础组件
$ apt update && apt install -y apt-transport-https software-properties-common ntp ntpdate
添加源
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
更新
$ apt update
列出当前安装Docker版本
$ apt-cache madison docker-ce
安装指定版本 19.03.7
$ apt install docker-ce=5:19.03.7~3-0~ubuntu-bionic
2.2 docker启动参数配置
$ sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxxxxxxx.mirror.aliyuncs.com"],
"iptables": false,
"ip-masq": false,
"storage-driver": "overlay2",
"graph": "/home/lk/docker"
}
EOF
$ sudo systemctl restart docker
2.3 配置docker使用systemd
$ cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
$ mkdir -p /etc/systemd/system/docker.service.d
$ systemctl daemon-reload
$ systemctl restart docker
3. 安装kubeadm、kubelet、kubectl
这些包都已经附在文末
$ curl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
$ cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb http://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
$ apt-get update
$ apt install kubernetes-cni
$ apt --fix-broken install
$ dpkg -i http://mirrors.aliyun.com/kubernetes/apt/pool/kubeadm_1.17.3-00_amd64_a993cfe07313b10cb69c3d0a680fdc0f6f3976e226d5fe3d062be0cea265274c.deb
$ dpkg -i http://mirrors.aliyun.com/kubernetes/apt/pool/kubelet_1.17.3-00_amd64_f0b930ce4160af585fb10dc8e4f76747a60f04b6343c45405afbe79d380ae41f.deb
$ dpkg -i http://mirrors.aliyun.com/kubernetes/apt/pool/kubectl_1.17.3-00_amd64_289913506f67535270a8ab4d9b30e6ece825440bc00a225295915741946c7bc6.deb
###
$ apt-mark hold kubelet kubeadm kubectl docker-ce
4. Kubernetes集群安装
—image-repository 指定镜像源,指定为阿里云的源,这样就会避免在拉取镜像超时,如果没问题,过几分钟就能看到成功的日志输入
$ sudo kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.17.3 --apiserver-advertise-address=172.16.59.129 --pod-network-cidr=10.244.0.0/16
部署成功会输出如下内容:
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
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 172.16.59.129:6443 --token axiuvd.mpnlyaefj29gwzhf \
--discovery-token-ca-cert-hash sha256:29c432b40f6fb55c5b42a04dcffd437fab7b9719c33322bf3102aaf6696ca000
记下其中的token,加入node节点时会用到。(最后一整行)
4.1.3 检查kubelet使用的cgroup driver
kubelet启动时指定的cgroup driver需要和docker所使用的保持一致。
1.查看 Docker 使用的 cgroup driver:
$ docker info | grep -i cgroup
-> Cgroup Driver: cgroupfs/systemd
2.查看kubelet指定的cgroup driver
Kubernetes文档中kubelet的启动参数–cgroup-driver string Driver that the kubelet uses to manipulate cgroups on the host. Possible values: ‘cgroupfs’, ‘systemd’ (default “cgroupfs”)。默认值为cgroupfs。yum安装kubelet、kubeadm时生成10-kubeadm.conf文件中可能将这个参数值改成了systemd。
查看kubelet的配置文件(1.12.0版本的封装在/var/lib/kubelet/kubeadm-flags.env文件中),如果是默认的cgroupfs,不需要修改。否则需要修改/etc/default/kubelet(或者/var/lib/kubelet/kubeadm-flags.env)文件:
$ sudo vim /etc/default/kubelet
KUBELET_KUBEADM_EXTRA_ARGS=--cgroup-driver=<value>
$ sudo systemctl daemon-reload
$ sudo systemctl restart kubelet
4.1.4 创建kubectl使用的kubeconfig文件
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
创建完成即可使用kubectl操作集群。
4.1.5 设置master参与工作负载
使用kubeadm初始化的集群,将master节点做了taint(污点),使得默认情况下(不设置容忍)Pod不会被调度到master上。这里搭建的是测试环境可以使用下面的命令去掉master的taint,使master参与工作负载:
$ kubectl taint nodes --all node-role.kubernetes.io/master-
node/hostname untainted
4.2 网络部署
4.2.2 flannel网络部署
calico部署会同时部署cni插件以及calico组件两部分,而flannel的部署只会初始化一些cni的配置文件,并不会部署cni的可执行文件,需要手动部署,所以flannel部署分为两步:
CNI插件部署
flannel组价部署
步骤一.CNI插件部署(所有节点)
1.创建cni插件目录
sudo mkdir -p /opt/cni/bin
cd /opt/cni/bin
2.到release页面下载二进制文件
sudo wget https://github.com/containernetworking/plugins/releases/download/v0.7.1/cni-plugins-amd64-v0.7.1.tgz
3.在/opt/cni/bin目录下解压即安装好
sudo tar -zxvf cni-plugins-amd64-v0.7.1.tgz
步骤二.flannel部署
1.获取yaml文件
$ cd ~/kubeadm
$ wget https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml
2.修改配置文件
<1>修改其中net-conf.json中的Network参数使其与kubeadm init时指定的–pod-network-cidr保持一致。
<2>这里v0.10.0版有一个bug,需要为启动flannel的daemonset添加toleration,以允许在尚未Ready的节点上部署flannel pod:
tolerations:
- key: node-role.kubernetes.io/master
operator: Exists
effect: NoSchedule
#添加下面这个toleration
- key: node.kubernetes.io/not-ready
operator: Exists
effect: NoSchedule
可以参考这个issue:https://github.com/coreos/flannel/issues/1044
3.镜像下载
下载yaml文件中所需镜像。quay.io镜像被墙下不了可以从这里下载:https://hub.docker.com/r/jmgao1983/flannel/tags/ , 之后再打回原tag。
4.部署
kubectl apply -f kube-flannel.yml
假如网络部署失败或出问题需要重新部署,执行以下内容清除生成的网络接口:
sudo ifconfig cni0 down
sudo ip link delete cni0
sudo ifconfig flannel.1 down
sudo ip link delete flannel.1
sudo rm -rf /var/lib/cni/
4.3 slave节点部署
同样按照上述步骤安装好docker、kubelet,并将master节点上的/etc/kubernetes/pki/etcd拷贝到slave相同位置,用于calico-node连接etcd使用,然后在slave节点上执行以下命令即可加入集群:
kubeadm join 192.168.1.175:6443 --token w2ks3i.13l40j8ux38oz31r --discovery-token-ca-cert-hash sha256:387a9081b55dbed4263c22c9a8ffd5e7270c1bcdcca4299c2a69cba7d3df74e7
注意:默认token的有效期为24小时,当过期之后,该token就不可用了。此时可以重新生成token:
kubeadm token generate
kubeadm token create <generated-token> --print-join-command --ttl=0
更多推荐
所有评论(0)