Installing Kubernetes on Linux with kubeadmnode
-----------------------------------------------------------linux
# cat /etc/centos-release
CentOS Linux release 7.3.1611 (Core)git
# systemctl disable firewalld # systemctl stop firewalld # cat /etc/sysconfig/selinux …… SELINUX=disabled ……
# cat /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 # yum install -y yum-utils # yum-config-manager \ --add-repo \ https://docs.docker.com/v1.13/engine/installation/linux/repo_files/centos/docker.repo # yum makecache fast
# yum list docker-engine.x86_64 --showduplicates |sort -r docker-engine.x86_64 1.13.1-1.el7.centos docker-main docker-engine.x86_64 1.12.6-1.el7.centos docker-main docker-engine.x86_64 1.11.2-1.el7.centos docker-main # yum list kubeadm --showduplicates |sort -r kubeadm.x86_64 1.6.1-0 kubernetes kubeadm.x86_64 1.6.0-0 kubernetes # yum list kubelet --showduplicates |sort -r kubelet.x86_64 1.6.1-0 kubernetes kubelet.x86_64 1.6.0-0 kubernetes kubelet.x86_64 1.5.4-0 kubernetes # yum list kubectl --showduplicates |sort -r kubectl.x86_64 1.6.1-0 kubernetes kubectl.x86_64 1.6.0-0 kubernetes kubectl.x86_64 1.5.4-0 kubernetes # yum list kubernets-cni --showduplicates |sort -r kubernetes-cni x86_64 0.5.1-0 kubernetes
根據官方文檔中的Installing Kubernetes on Linux with kubeadm · Limitations小節中的內容,對各節點系統作以下設置:
建立/etc/sysctl.d/k8s.conf文件,添加以下內容:github
net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1
執行sysctl -p /etc/sysctl.d/k8s.conf使修改生效。docker
# yum -y install docker-engine-1.12.6 # yum -y install socat kubelet-1.6.1 kubeadm-1.6.1 kubectl-1.6.1 kubernetes-cni-0.5.1 # rpm -qa|grep kube kubectl-1.6.1-0.x86_64 kubelet-1.6.1-0.x86_64 kubernetes-cni-0.5.1-0.x86_64 kubeadm-1.6.1-0.x86_64
# systemctl enable docker && systemctl start docker
# docker pull quay.io/coreos/flannel:v0.7.1-amd64 # docker pull gcr.io/google_containers/kube-proxy-amd64:v1.6.1 # docker pull gcr.io/google_containers/kube-apiserver-amd64:v1.6.1 # docker pull gcr.io/google_containers/kube-scheduler-amd64:v1.6.1 # docker pull gcr.io/google_containers/kube-controller-manager-amd64:v1.6.1 # docker pull gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.1 # docker pull gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.1 # docker pull gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.1 # docker pull gcr.io/google_containers/etcd-amd64:3.0.17 # docker pull gcr.io/google_containers/pause-amd64:3.0
# docker images REPOSITORY TAG IMAGE ID CREATED SIZE quay.io/coreos/flannel v0.7.1-amd64 cd4ae0be5e1b 2 weeks ago 77.76 MB gcr.io/google_containers/kube-proxy-amd64 v1.6.1 ec956fe05f2d 4 weeks ago 109.2 MB gcr.io/google_containers/kube-apiserver-amd64 v1.6.1 1f685ed29076 4 weeks ago 150.5 MB gcr.io/google_containers/kube-scheduler-amd64 v1.6.1 acfe393e96ba 4 weeks ago 76.75 MB gcr.io/google_containers/kube-controller-manager-amd64 v1.6.1 591d6604f79b 4 weeks ago 132.7 MB gcr.io/google_containers/k8s-dns-sidecar-amd64 1.14.1 fc5e302d8309 9 weeks ago 44.52 MB gcr.io/google_containers/k8s-dns-kube-dns-amd64 1.14.1 f8363dbf447b 9 weeks ago 52.36 MB gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64 1.14.1 1091847716ec 9 weeks ago 44.84 MB gcr.io/google_containers/etcd-amd64 3.0.17 243830dae7dd 9 weeks ago 168.9 MB gcr.io/google_containers/pause-amd64 3.0 99e59f495ffa 12 months ago 746.9 kB
# systemctl enable kubelet # systemctl start kubelet
# kubeadm init \ --apiserver-advertise-address=172.16.20.99 \ --kubernetes-version=v1.6.1 \ --pod-network-cidr=10.244.0.0/16
參數解釋:
--apiserver-advertise-address # API Server(master)IP地址
--kubernetes-version # 初始化安裝的Kubernetes版本
--pod-network-cidr # 選擇flannel做爲Pod的網絡插件,因此指定 10.244.0.0/16
bootstrap
爲了使用kubectl訪問apiserver,在~/.bash_profile中追加下面的環境變量:vim
# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile # source ~/.bash_profile # kubectl get nodesNAME STATUS AGE VERSIONnode0 NotReady 3m v1.6.1
# kubectl create -f \ https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel-rbac.yml # kubectl apply -f \ https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml \ serviceaccount "flannel" \ createdconfigmap "kube-flannel-cfg" \ createddaemonset "kube-flannel-ds" \ created
PS:若是Node有多個網卡的話,參考flannel issues 39701,目前須要在kube-flannel.yml 中使用--iface參數指定集羣主機內網網卡的名稱,不然可能會出現dns沒法解析。
須要將kube-flannel.yml下載到本地,flanneld啓動參數加上--iface=<iface-name>
使用kubectl get pod --all-namespaces -o wide 確保全部的Pod都處於Running狀態。centos
使用kubeadm初始化的集羣,出於安全考慮Pod不會被調度到Master Node上,也就是說Master Node不參與工做負載。api
這裏搭建的是測試環境能夠使用下面的命令使Master Node參與工做負載:安全
kubectl taint nodes --all node-role.kubernetes.io/master-
創建測試容器:
# vim busybox.yaml apiVersion: v1 kind: Pod metadata: name: busybox namespace: default spec: containers: - image: busybox command: - sleep - "3600" imagePullPolicy: IfNotPresent name: busybox restartPolicy: Always # kubectl create -f busybox.yaml pod "busybox" created
進入後執行nslookup kubernetes.default確認解析正常
# kubectl exec -ti busybox -- nslookup kubernetes.default Server: 10.96.0.10 Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local Name: kubernetes.default Address 1: 10.96.0.1 kubernetes.default.svc.cluster.local 測試ok以後,刪掉這個測試pod # kubectl delete pod busybox pod "busybox" deleted
# kubeadm token list TOKEN TTL EXPIRES USAGES DESCRIPTION 22a850.15bb6e6da239c542 <forever> <never> authentication,signing The default bootstrap token generated by 'kubeadm init'.