提示:本實驗使用單master部署,生產中可部署奇數個master以作高可用。html
1 [root@master ~]# cat <<EOF >> /etc/hosts 2 172.24.8.71 master 3 172.24.8.72 node1 4 172.24.8.73 node2 5 EOF
1 [root@k8s_master ~]# cat <<EOF >> /etc/sysctl.d/k8s.conf 2 net.bridge.bridge-nf-call-ip6tables = 1 3 net.bridge.bridge-nf-call-iptables = 1 4 net.ipv4.ip_forward = 1 5 EOF 6 [root@master ~]# modprobe br_netfilter 7 [root@master ~]# sysctl -p /etc/sysctl.d/k8s.conf
1 [root@master ~]# cat > /etc/sysconfig/modules/ipvs.modules <<EOF 2 #!/bin/bash 3 modprobe -- ip_vs 4 modprobe -- ip_vs_rr 5 modprobe -- ip_vs_wrr 6 modprobe -- ip_vs_sh 7 modprobe -- nf_conntrack_ipv4 8 EOF 9 [root@master ~]# chmod 755 /etc/sysconfig/modules/ipvs.modules 10 [root@master ~]# bash /etc/sysconfig/modules/ipvs.modules 11 [root@master ~]# lsmod | grep -e ip_vs -e nf_conntrack_ipv4 12 [root@master ~]# yum -y install ipvsadm
1 [root@master ~]# yum -y update 2 [root@master ~]# yum -y install yum-utils device-mapper-persistent-data lvm2 3 [root@master ~]# yum-config-manager \ 4 --add-repo \ 5 http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 6 [root@master ~]# yum list docker-ce --showduplicates | sort -r #查看可用版本 7 [root@master ~]# yum -y install docker-ce-18.09.0-3.el7 #kubeadm當前不支持18.09以上版本 8 [root@master ~]# mkdir /etc/docker 9 [root@master ~]# cat > /etc/docker/daemon.json <<EOF 10 { 11 "exec-opts": ["native.cgroupdriver=systemd"], 12 "log-driver": "json-file", 13 "log-opts": { 14 "max-size": "100m" 15 }, 16 "storage-driver": "overlay2", 17 "storage-opts": [ 18 "overlay2.override_kernel_check=true" 19 ] 20 } 21 EOF #配置system管理cgroup 22 [root@master ~]# vi /usr/lib/systemd/system/docker.service #更改docker鏡像路徑 23 ExecStart=/usr/bin/dockerd-current --data-root=/data/docker #修改成獨立的單獨路徑 24 [root@master ~]# systemctl daemon-reload 25 [root@master ~]# systemctl restart docker 26 [root@master ~]# systemctl enable docker 27 [root@master ~]# iptables -nvL #確認iptables filter表中FOWARD鏈的默認策略(pllicy)爲ACCEPT。
Kubernetes 1.13版本兼容docker版本等可參考:https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.13.md。node
1 [root@master ~]# cat <<EOF > /etc/yum.repos.d/kubernetes.repo 2 [kubernetes] 3 name=Kubernetes 4 baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ 5 enabled=1 6 gpgcheck=1 7 repo_gpgcheck=1 8 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg 9 EOF 10 #配置yum源 11 [root@master ~]# yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
1 [root@master ~]# systemctl enable kubelet
1 [root@master ~]# echo "vm.swappiness=0" >> /etc/sysctl.d/k8s.conf 2 [root@master ~]# sysctl -p /etc/sysctl.d/k8s.conf
1 [root@master ~]# kubeadm init --kubernetes-version=v1.14.0 --pod-network-cidr=10.244.0.0/16
1 [root@master ~]# mkdir -p $HOME/.kube 2 [root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config 3 [root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
1 [root@master ~]# export KUBECONFIG=$HOME/.kube/config #聲明配置文件
1 [root@master ~]# kubectl get cs 2 NAME STATUS MESSAGE ERROR 3 controller-manager Healthy ok 4 scheduler Healthy ok 5 etcd-0 Healthy {"health":"true"}
1 [root@master ~]# mkdir flannel 2 [root@master ~]# cd flannel/ 3 [root@master flannel]# wget https://raw.githubusercontent.com/coreos/flannel/62e44c867a2846fefb68bd5f178daf4da3095ccb/Documentation/kube-flannel.yml 4 [root@master flannel]# kubectl apply -f kube-flannel.yml 5 [root@master ~]# kubectl get pod --all-namespaces -o wide #查看相關pod
1 [root@master ~]# kubectl describe node master | grep Taint 2 Taints: node-role.kubernetes.io/master:NoSchedule
1 [root@master ~]# kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
1 [root@master ~]# kubectl get pods --all-namespaces #查看驗證 2 [root@master ~]# kubectl get nodes
1 [root@node1 ~]# echo "1" >/proc/sys/net/ipv4/ip_forward 2 [root@node1 ~]# kubeadm join 172.24.8.71:6443 --token v6xij5.cdhd5h5hspohf1kc \ 3 --discovery-token-ca-cert-hash sha256:94b9a19c3d4b9bd7b4f0ff86a882dad5fe4549b0365626e7f4d26831c9caa0c4 4 [root@node2 ~]# echo "1" >/proc/sys/net/ipv4/ip_forward 5 [root@node2 ~]# kubeadm join 172.24.8.71:6443 --token v6xij5.cdhd5h5hspohf1kc \ 6 --discovery-token-ca-cert-hash sha256:94b9a19c3d4b9bd7b4f0ff86a882dad5fe4549b0365626e7f4d26831c9caa0c4
1 [root@master ~]# kubectl get nodes #節點狀態 2 [root@master ~]# kubectl get cs #組件狀態 3 [root@master ~]# kubectl get serviceaccount #服務帳戶 4 [root@master ~]# kubectl cluster-info #集羣信息 5 [root@master ~]# kubectl get pod -n kube-system -o wide #全部服務狀態
1 [root@master ~]# kubectl edit cm kube-proxy -n kube-system #模式改成ipvs 2 …… 3 mode: "ipvs" 4 …… 5 [root@master ~]# kubectl get pod -n kube-system | grep kube-proxy | awk '{system("kubectl delete pod "$1" -n kube-system")}' 6 [root@master ~]# kubectl get pod -n kube-system | grep kube-proxy #查看proxy的pod 7 [root@master ~]# kubectl logs kube-proxy-mgqfs -n kube-system #查看任意一個proxy pod的日誌
1 [root@master ~]# kubectl drain node2 --delete-local-data --force --ignore-daemonsets 2 [root@master ~]# kubectl delete node node2 3 [root@master ~]# kubectl get nodes
1 [root@node2 ~]# kubeadm reset 2 [root@node2 ~]# ifconfig cni0 down 3 [root@node2 ~]# ip link delete cni0 4 [root@node2 ~]# ifconfig flannel.1 down 5 [root@node2 ~]# ip link delete flannel.1 6 [root@node2 ~]# rm -rf /var/lib/cni/
1 [root@master ~]# kubectl run nginx --replicas=2 --labels="run=load-balancer-example" --image=nginx --port=80 2 [root@master ~]# kubectl expose deployment nginx --type=NodePort --name=example-service #暴露端口 3 [root@master ~]# kubectl get service #查看服務狀態 4 [root@master ~]# kubectl describe service example-service #查看信息
1 [root@master ~]# curl 10.102.244.218:80
1 [root@master ~]# kubectl get pod -o wide #查看endpoint
1 [root@master ~]# curl 10.244.3.2:80 #訪問endpoint,與訪問服務ip結果相同 2 [root@master ~]# curl 10.244.1.2:80
1 --apiserver-advertise-address string:API Server將要廣播的監聽地址。如指定爲`0.0.0.0` 將使用缺省的網卡地址。 2 --apiserver-bind-port int32:API Server綁定的端口,缺省值: 6443 3 --apiserver-cert-extra-sans stringSlice:可選的額外提供的證書的別名,(SANs)用於指定API Server的服務器證書。能夠是IP地址也能夠是DNS名稱。 4 5 --cert-dir string:證書的存儲路徑,缺省值: "/etc/kubernetes/pki" 6 --config string:kubeadm配置文件的路徑。 7 --cri-socket string:指明要鏈接的CRI socket文件,缺省值: "/var/run/dockershim.sock" 8 --dry-run:不會應用任何改變,只會輸出將要執行的操做,即測試運行。 9 --feature-gates string:鍵值對的集合,用來控制各類功能的開關。可選項有: 10 Auditing=true|false (當前爲ALPHA狀態 - 缺省值=false) 11 CoreDNS=true|false (缺省值=true) 12 DynamicKubeletConfig=true|false (當前爲BETA狀態 - 缺省值=false) 13 -h, --help:獲取init命令的幫助信息。 14 --ignore-preflight-errors stringSlice:忽視檢查項錯誤列表,列表中的每個檢查項如發生錯誤將被展現輸出爲警告,而非錯誤。例如: 'IsPrivilegedUser,Swap'. 如填寫爲 'all' 則將忽視全部的檢查項錯誤。 15 --kubernetes-version string:爲control plane選擇一個特定的Kubernetes版本,缺省值: "stable-1" 16 --node-name string:指定節點的名稱。 17 --pod-network-cidr string:指明pod網絡可使用的IP地址段。若是設置了這個參數,control plane將會爲每個節點自動分配CIDRs。 18 --service-cidr string:爲service的虛擬IP地址另外指定IP地址段,缺省值: "10.96.0.0/12" 19 --service-dns-domain string:爲services另外指定域名, 例如: "myorg.internal",缺省值: "cluster.local" 20 --skip-token-print:不打印出由 `kubeadm init` 命令生成的默認令牌。 21 --token string:這個令牌用於創建主從節點間的雙向受信連接。格式爲 [a-z0-9]{6}\.[a-z0-9]{16} - 示例:abcdef.0123456789abcdef 22 --token-ttl duration:令牌被自動刪除前的可用時長 (示例: 1s, 2m, 3h). 若是設置爲 '0', 令牌將永不過時。缺省值: 24h0m0s