k8s版本
主机名
ip
配置
1.10
master
192.168.61.250
4C8G
node1
192.168.61.251
4C8G
node2
192.168.61.252
4C8G
kubectl 命令补全
[email protected]:/# vim /etc/profile #添加下面这句,再source
source <(kubectl completion bash)
[email protected]:/# source /etc/profile
修改主机名,时区
timedatectl set-timezone Asia/Shanghai
hostnamectl set-hostname master
hostnamectl set-hostname node1
hostnamectl set-hostname node2
修改hosts文件
cat <<eof >> /etc/hosts
192.168.61.250 master
192.168.61.251 node1
192.168.61.252 node2
eof
关闭所有节点的seliux以及firewalld
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
systemctl disable firewalld
systemctl stop firewalld
1. 安装docker
上传离线文件
tar -xvf docker-packages.tar
cd docker-packages
for i in `ls`; do rpm -Uvh $i; done
yum -y install docker
docker version
systemctl start docker && systemctl enable docker
docker info | grep Driver
systemctl cat docker
修改docker驱动为cgroupfs驱动(此处版本为1.13修改方式,高版本为其他文件)
sed -i '/native.cgroupdriver/s/systemd/cgroupfs/g' /usr/lib/systemd/system/docker.service
systemctl daemon-reload && systemctl restart docker
systemctl status docker
2. 安装k8s
安装kubeadm,kubectl,kubelet
使用文件kube-packages-1.10.1.tar,每个节点都要安装
kubeadm是集群部署工具
kubectl是集群管理工具,通过command来管理集群
kubelet的k8s集群每个节点的docker管理服务
tar -xvf kube-packages-1.10.1.tar
cd kube-packages-1.10.1
rpm -Uvh *
在所有kubernetes节点上设置kubelet使用cgroupfs,与dockerd保持一致,否则kubelet会启动报错
sed -i "s/cgroup-driver=systemd/cgroup-driver=cgroupfs/g" /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
systemctl daemon-reload && systemctl restart kubelet
修改
vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
Environment="DAEMON_ARGS=--runtime-cgroups=/systemd/system.slice --kubelet-cgroups=/systemd/system.slice"
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBELET_AUTHZ_ARGS $KUBELET_CADVISOR_ARGS $KUBELET_CGROUP_ARGS $KUBELET_CERTIFICATE_ARGS $KUBELET_EXTRA_ARGS $DAEMON_ARGS
关闭swap,及修改iptables,不然后面kubeadm会报错
swapoff -a
sed -i '/swap/s/^/#/g' /etc/fstab
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
3. 导入镜像(导入到docker)
cd ..
docker load -i k8s-images-1.10.tar.gz
docker images
一共11个镜像,分别是 k8s.gcr.io/etcd-amd64:3.1.12 k8s.gcr.io/kube-apiserver-amd64:v1.10.1 k8s.gcr.io/kube-controller-manager-amd64:v1.10.1 k8s.gcr.io/kube-proxy-amd64:v1.10.1 k8s.gcr.io/kube-scheduler-amd64:v1.10.1 k8s.gcr.io/pause-amd64:3.1 k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.8 k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64:1.14.8 k8s.gcr.io/k8s-dns-sidecar-amd64:1.14.8 k8s.gcr.io/kubernetes-dashboard-amd64:v1.8.3 quay.io/coreos/flannel:v0.9.1-amd64
4. kubeadm init 部署master节点
kubeadm init --kubernetes-version=v1.10.1 --pod-network-cidr=10.244.0.0/16
将结果记录下来
node加入master用到
kubeadm join 192.168.61.250:6443 --token jo5f9v.8qp1641qgxl15ba7 --discovery-token-ca-cert-hash sha256:2aa75a48cf7f9ecb5710df6e6311a17afb2e471194f9344175c6351b60308c59
记下join的命令,后续node节点加入的时候要用到
执行提示的命令,保存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 get node 已经可以看到master节点,notready是因为还未部署网络插件
查看所有的pod,kubectl get pod --all-namespaces
kubedns也依赖于容器网络,此时pending是正常的
配置KUBECONFIG变量
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
source /etc/profile
echo $KUBECONFIG #应该返回/etc/kubernetes/admin.conf
5. 部署flannel网络
k8s支持多种网络方案,flannel,calico,openvswitch
此处选择flannel。 在熟悉了k8s部署后,可以尝试其他网络方案
kubectl apply -f kube-flannel.yml
网络部署完成后,节点状态变为ready
6. kubeadm join 加入node节点(节点加入集群)
kubeadm token list #查看token
kubeadm join 192.168.61.250:6443 --token jo5f9v.8qp1641qgxl15ba7 --discovery-token-ca-cert-hash sha256:2aa75a48cf7f9ecb5710df6e6311a17afb2e471194f9344175c6351b60308c59
8. master上查看node
kubectl get node
至此,集群已经部署完成。
如果token失效
则kubeadm token create创建一个,记录下token数据
kubeadm token list
node节点执行如下,把token部分进行替换
kubeadm join --token wct45y.tq23fogetd7rp3ck 192.168.1.181:6443 --discovery-token-unsafe-skip-ca-verification
原文地址:http://blog.51cto.com/13272050/2156031