提示:本实验使用单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