寫給想入門kubernetes的同學們
# 系統版本
[root@master ~]# cat /etc/os-release NAME="CentOS Linux" VERSION="7 (Core)" ID="centos" ID_LIKE="rhel fedora" VERSION_ID="7" PRETTY_NAME="CentOS Linux 7 (Core)" ANSI_COLOR="0;31" CPE_NAME="cpe:/o:centos:centos:7" HOME_URL="https://www.centos.org/" BUG_REPORT_URL="https://bugs.centos.org/" CENTOS_MANTISBT_PROJECT="CentOS-7" CENTOS_MANTISBT_PROJECT_VERSION="7" REDHAT_SUPPORT_PRODUCT="centos" REDHAT_SUPPORT_PRODUCT_VERSION="7"
#主機環境
網絡規划 172.20.0.0/16 node通信網絡 master 172.20.0.2 node1 172.20.0.3 node2 172.20.0.4 10.244.0.0/16 Pod 網絡 10.96.0.0/12 Service 網絡
#內核參數
[root@master ~]# cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
使配置生效
[root@linux-node1 ~]# sysctl --system
# 初始化操作
安裝 docker 和 kubeadm 在各個節點上(建議使用阿里雲資源進行安裝,不然會很卡)https://opsx.alibaba.com/mirror
# step 1: 安裝必要的一些系統工具 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # Step 2: 添加軟件源信息 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # Step 3: 更新並安裝 Docker-CE sudo yum makecache fast sudo yum -y install docker-ce # Step 4: 開啟Docker服務 sudo service docker start # 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 setenforce 0 yum install -y kubelet kubeadm kubectl systemctl enable kubelet
# 鏡像拉去
執行kubeadm init 進程會幫我們自動拉去這些進程並初始化master 集群。但是貌似這些鏡像不太好拉去。
我選擇的方式是購買共有雲的香港節點,安裝docker 手動進行資源拉去 然后在打包 docker文件夾(/var/lib/docker),然后覆蓋三台主機的docker主程序目錄。
[root@master ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE k8s.gcr.io/kube-apiserver v1.13.3 fe242e556a99 3 weeks ago 181MB k8s.gcr.io/kube-controller-manager v1.13.3 0482f6400933 3 weeks ago 146MB k8s.gcr.io/kube-proxy v1.13.3 98db19758ad4 3 weeks ago 80.3MB k8s.gcr.io/kube-scheduler v1.13.3 3a6f709e97a0 3 weeks ago 79.6MB k8s.gcr.io/coredns 1.2.6 f59dcacceff4 3 months ago 40MB k8s.gcr.io/etcd 3.2.24 3cab8e1b9802 5 months ago 220MB k8s.gcr.io/pause 3.1 da86e6ba6ca1 14 months ago 742kB
# 執行 kubeadm init
mkdir .kube
cp /etc/kubernetes/admin.conf .kube/config
將node節點加入我們的master節點需要做兩方面操作 1 配置好hosts文件解析 2 使用命令行加入k8s集群 kubeadm join 172.20.0.91:6443 --token zibyeb.pmujgusravogr0k9 --discovery-token-ca-cert-hash sha256:f5f12fe4f58fbf698f33eb078c8b98b8491e2e2e996230926f 一個是token 默認24小時失效 可通過 kubeadm token命令進行create 一個是 根證書的 sha256 值 通過以下命令獲取 openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //' node節點會安裝flannle 然后變成可用
For Kubernetes v1.7+kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 最后狀態
[root@master ~]# kubectl get nodes -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME k8s-node1 Ready <none> 5d6h v1.13.3 172.20.0.3 <none> CentOS Linux 7 (Core) 3.10.0-957.el7.x86_64 docker://18.9.2 k8s-node2 Ready <none> 5d6h v1.13.3 172.20.0.4 <none> CentOS Linux 7 (Core) 3.10.0-957.el7.x86_64 docker://18.9.2 master Ready master 5d9h v1.13.3 172.20.0.2 <none> CentOS Linux 7 (Core) 3.10.0-957.el7.x86_64 docker://18.9.2
# kubectl 命令行自動補全
source < $(kubectl completion bash ) kubectl completion bash > ~/.kube/completion.bash.inc
# 搞定了 開始你的 k8s 之路吧。
kubeadm 幫你做了什么
[init]:指定版本進行初始化操作 [preflight] :初始化前的檢查和下載所需要的Docker鏡像文件 [kubelet-start] :生成kubelet的配置文件”/var/lib/kubelet/config.yaml”,沒有這個文件kubelet無法啟動,所以初始化之前的kubelet實際上啟動失敗。 [certificates]:生成Kubernetes使用的證書,存放在/etc/kubernetes/pki目錄中。 [kubeconfig] :生成 KubeConfig 文件,存放在/etc/kubernetes目錄中,組件之間通信需要使用對應文件。 [control-plane]:使用/etc/kubernetes/manifest目錄下的YAML文件,安裝 Master 組件。 [etcd]:使用/etc/kubernetes/manifest/etcd.yaml安裝Etcd服務。 [wait-control-plane]:等待control-plan部署的Master組件啟動。 [apiclient]:檢查Master組件服務狀態。 [uploadconfig]:更新配置 [kubelet]:使用configMap配置kubelet。 [patchnode]:更新CNI信息到Node上,通過注釋的方式記錄。 [mark-control-plane]:為當前節點打標簽,打了角色Master,和不可調度標簽,這樣默認就不會使用Master節點來運行Pod。 [bootstrap-token]:生成token記錄下來,后邊使用kubeadm join往集群中添加節點時會用到 [addons]:安裝附加組件CoreDNS和kube-proxy
