写给想入门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