直接寫過程,有些描述就省略了
關於kubeadm安裝k8s 1.11.2版本可以查看:https://www.cnblogs.com/shansongxian/p/9753603.html
首先查看下k8s 1.12版的changlog有哪些改動
github地址:https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.12.md#changelog-since-v1120

終於支持docker 18.06了
首先說下環境:
系統:centos 7 1708版本
地址:192.168.237.128(演示環境無額外Nodes節點機器)
docker: 18.06
k8s: 1.12.1
最低配置:2核2G
第一步調整下系統內核參數,hosts修改,加載ipvs模塊,關閉swap,selinux,firewall,系統時間
192.168.237.128 k8s-master
cat <<EOF > /etc/sysctl.d/k8s.conf net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 vm.swappiness = 0 EOF sysctl --system
yum install ipset ipvsadm conntrack-tools.x86_64 -y
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
ipvs_modules="ip_vs ip_vs_lc ip_vs_wlc ip_vs_rr ip_vs_wrr ip_vs_lblc ip_vs_lblcr ip_vs_dh ip_vs_sh ip_vs_fo ip_vs_nq ip_vs_sed ip_vs_ftp nf_conntrack_ipv4"
for kernel_module in \${ipvs_modules}; do
/sbin/modinfo -F filename \${kernel_module} > /dev/null 2>&1
if [ $? -eq 0 ]; then
/sbin/modprobe \${kernel_module}
fi
done
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules
sh /etc/sysconfig/modules/ipvs.modules && lsmod | grep ip_vs
systemctl stop firewalld && systemctl disable firewalld sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config sed -i 's/.*swap.*/#&/' /etc/fstab
echo "*/5 * * * * /usr/sbin/ntpdate time.windows.com > /dev/null 2>&1" >> /var/spool/cron/root
重啟下系統
第二步安裝docker
yum install container-selinux libseccomp libtool-ltdl -y
rpm -ivh https://mirrors.ustc.edu.cn/docker-ce/linux/centos/7/x86_64/stable/Packages/docker-ce-18.06.1.ce-3.el7.x86_64.rpm
systemctl start docker && systemctl enable docker
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://8vtb3cuu.mirror.aliyuncs.com"]
}
EOF
systemctl restart docker
第三步安裝kubeadm
cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF 默認安裝kubeadm kubectl kubelet cri-tools kubernetes-cni socat 查看安裝版本 yum list kubeadm --showduplicates yum list kubectl --showduplicates yum list kubelet --showduplicates yum list kubernetes-cni --showduplicates 不指定版本默認安裝最新版1.12.1 yum install kubeadm -y
第四步利用kubeadm安裝k8國內無法下載谷歌鏡像,使用anjia0532鏡像,更改為默認kubeadm中的鏡像名稱
kubeadm config images list --kubernetes-version v1.12.1
使用shell腳本快速操作:
#!/bin/bash
KUBE_VERSION=v1.12.1
KUBE_PAUSE_VERSION=3.1
ETCD_VERSION=3.2.24
DNS_VERSION=1.2.2
ANJIA_URL=anjia0532/google-containers
GCR_UR=k8s.gcr.io
images=(kube-apiserver:${KUBE_VERSION}
kube-controller-manager:${KUBE_VERSION}
kube-scheduler:${KUBE_VERSION}
kube-proxy:${KUBE_VERSION}
pause:${KUBE_PAUSE_VERSION}
etcd:${ETCD_VERSION}
coredns:${DNS_VERSION})
for imageName in ${images[@]} ; do
docker pull $ANJIA_URL.$imageName
docker tag $ANJIA_URL.$imageName $GCR_UR/$imageName
docker rmi $ANJIA_URL.$imageName
done
打印kubeadm默認配置,kubeadm配置文件按照默認配置進行修改
kubeadm config print-default
kubeadm v1.12 kubeProxy默認已經使用ipvs模式,在v1.11.x中還需要在配置中指定,如果服務器有多個網卡地址,還需要指定出口IP,使用參數--apiserver-advertise-address=<ip-address>
必需要指定的參數是Pod的網段,使用參數--pod-network-cidr 除了使用參數方式外還可以創建kubeadm-config.yaml文件進行定制化
這里使用加載yaml配置文件的方式,也是推薦的方法
指定10.244.0.0/16網段作為Pod的地址段,也是Flannel網絡的默認網段
kind and apiVersion是需要在yaml中強制擁有的信息,
apiVersion: kubeadm.k8s.io/v1alpha3
kind: ClusterConfiguration
kubernetesVersion: v1.12.1
networking:
dnsDomain: cluster.local
podSubnet: 10.244.0.0/16
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: "ipvs"
執行Init創建集群
systemctl enable kubelet.service
kubeadm init --config kubeadm-config.yaml
kubeadm會默認安裝Coredns kube-proxy兩個插件 root用戶直接添加環境變量/etc/profile kubectl需要讀取授權信息訪問kubernetes集群 export KUBECONFIG=/etc/kubernetes/admin.conf 非root用戶則執行屏幕輸出的 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語句,用於添加工作節點 查看集群狀態 kubectl get cs 查看節點,pods kube get nodes kube get pods,svc -n kube-system
第五步添加Pod網絡組件
必須在任何應用程序之前部署網絡。此外,CoreDNS將不會在安裝網絡之前啟動
注意,kubeadm默認設置更安全的群集並強制使用RBAC。確保您的網絡清單支持RBAC
我這里master和Nodes都在同一台機器,默認Master是不允許運行用戶Pod的
執行:
kubectl taint nodes k8s-master node-role.kubernetes.io/master:NoSchedule-
部署Flannel網絡
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
有多個網卡的話,需要在kube-flannel.yml中使用--iface參數指定集群主機內網網卡的名稱,(集群中的主機通過內網網段通信)否則可能會出現dns無法解析。flanneld啟動參數加上--iface=<iface-name>
args:
- --ip-masq
- --kube-subnet-mgr
- --iface=ens33
#默認Pod網段(為kubeadm.yaml定義的Pod網段,如果不是10.244.0.0/16則需要修改)
net-conf.json: |
{
"Network": "10.244.0.0/16",
"Backend": {
"Type": "vxlan"
}
}
#應用flannel
kubectl apply -f kube-flannel.yml
若出現imagepullerror無法下載quay.io/coreos/flannel:v0.10.0-amd64時,使用下面方法:
docker pull registry.cn-shenzhen.aliyuncs.com/cp_m/flannel:v0.10.0-amd64
docker tag registry.cn-shenzhen.aliyuncs.com/cp_m/flannel:v0.10.0-amd64 quay.io/coreos/flannel:v0.10.0-amd64
docker rmi registry.cn-shenzhen.aliyuncs.com/cp_m/flannel:v0.10.0-amd64
第六步 配置treak ingress
kubectl apply -f https://raw.githubusercontent.com/containous/traefik/master/examples/k8s/traefik-rbac.yaml
#使用DaemonSets部署方式
kubectl apply -f https://raw.githubusercontent.com/containous/traefik/master/examples/k8s/traefik-ds.yaml
wget https://raw.githubusercontent.com/containous/traefik/master/examples/k8s/ui.yaml
修改ui.yaml中host域名
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: traefik-web-ui
namespace: kube-system
spec:
rules:
- host: www.abc.com
http:
paths:
- path: /
backend:
serviceName: traefik-web-ui
servicePort: web
添加hosts映射訪問域名

第七步配置Dashboard
下載anjia鏡像
docker pull anjia0532/google-containers.kubernetes-dashboard-amd64:v1.10.0
docker tag anjia0532/google-containers.kubernetes-dashboard-amd64:v1.10.0 k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.0
docker rmi anjia0532/google-containers.kubernetes-dashboard-amd64:v1.10.0
wget https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
在yaml文件末尾加上
type: NodePort
使用此方法暴露dashboard服務
創建rdbc授權文件kubernetes-dashboard-rbac.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kube-system
#應用定義文件
kubectl apply -f kubernetes-dashboard.yaml
kubectl apply -f kubernetes-dashboard-rbac.yaml
#查看admin-user用戶token
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
#復制token,在瀏覽器上選擇令牌方式
使用火狐瀏覽器,https://ip:port
