序文:
マイクロサービスはまだ普及しておらず、サービスグリッドの登場により3つの会社に感心しました。私は死なずに死なないという原則に従って、深い(ru)研究を行いました。このシリーズは、「サービスグリッドのkubeadmに基づくk8sとDashBoardのインストール」、「サービスグリッドのKubernetesに基づくIstioのインストール」、「サービスグリッドのIstio基本プラクティス」、「サービスグリッド」の4つの記事で構成されています。 Istioを使用してマイクロサービスを開発します。
学習への道はでこぼこですが、この道はあなたの人生を疑うようにあなたを陥落させるピットのピットです。したがって、この記事では、インターネットでのベストプラクティスと私のピットステッピングプラクティスを収集し、ピットやルーチンのないk8sチュートリアルのインストールが称賛され、奨励されていると結論付けました。
冒頭の言葉:
注:k8sのステータスが間違っている場合は、kubeletサービスのステータスを確認し、設定したホストが有効になるかどうかに注意してください
#kubeletログ情報の表示
journalctl -xeu kubelet
環境:インストール環境は、CentOS 7を実行するHyper-V仮想マシンであり、Kubernetesは1.18です。
機械の基本設定
仮想マシンを作成します。
Hyper-Vを使用して仮想マシンを作成し、CentOSをインストールします。Hyper-VのCentOSがインターネットにどのようにアクセスするかが問題です。
最も簡単な方法は、Hyper-Vでネットワークを作成し、作成したネットワークを仮想マシンに使用することです。同時に、図に示すように、仮想マシンが外部ネットワークにアクセスできるように、仮想マシンを自身の物理マシンのネットワークでHyper-Vで作成されたネットワークと共有できます。
ホスト名は、1台のマシンのみ、またはすべてのノードで設定できます。
#マスターノードが hostnamectl setを実行 - ホスト名 k8s- マスター #スレーブ ノードが hostnamectlセットを実行 - ホスト名 k8s-node1
/ etc / hostsファイルを変更して、ホスト名とIPアドレスをマップします。
vim / etc / hosts ##次の内容をファイルに 追加しますip address k8s - master ip address k8s -node1
再起動するたびにIPが変更されないようにするには、静的IPアドレスを設定します。
#このパスに切り替え cd / etc / sysconfig / network- scripts #ファイル情報を表示ls#最初のファイルを編集、一般名はifcfg -ens + number、ローカルはifcfg- eth0 vim ifcfg - eth0 BOOTPROTO = " 静的な" 静的なように変更# IPADDR = 192.168。242.138 #が自分修正することができ GATEWAY = 192.168。242.2 #を、同じ物理マシンのゲートウェイ= NETMASKにネットワークを作成255.255。255.0 ONBOOT = yesの
DNSを設定する
VIMの/ etc / resolv.confの #は、次の書き込み ネームサーバ192.168。242.2 #一貫したゲートウェイ
ネットワークサービスを再起動します
サービスネットワークの再起動
テスト中
ping www.baidu.com
ファイアウォールをオフにして無効にする
systemctl stop firewalld
systemctl disable firewalld
SeLinuxを閉じる
コンテナがホストのファイルシステムにアクセスできるように、selinuxを閉じます。
#無効に セッド -i ' S /強制/無効/ 'は/ etc / SELinuxの/ コンフィグ #検証閉じる CATの/ etc / SELinuxの/ configに
スワップを無効にする
kubernetesの操作を閉じないとエラーが発生し、インストールが成功しても、ノードの再起動後にkubern etesサーバーの操作エラーが表示されます。
#ファイルを編集し、#を使用してスワップ vim / etc / fstab にコメントを付けます
コンピュータを再起動します
リブート
スワップを表示
無料 -h
selinuxのステータスを表示する
getenforce無効
Docker設定
Dockerのyumインストールソースを構成し、docker-ceをインストールします。
Dockerインストールソースの構成
yum -y install yum -utils yum -config-manager --add-repo http:// mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
利用可能なバージョンを確認し、適切なバージョンを選択してください
yumリストdocker-ce --showduplicates | grep " ^ doc " | ソート -r
インストールする
yum -y install docker-ce- 18.06。1 .ce- 3 .el7
ドッカーを起動
systemctl start
docker systemctl enable docker
#验证
dockerの状態态systemctl status docker
k8sをインストールする
Alibaba Cloud Yumミラーとしてkubernetesを構成する
echo " [kubernetes] name = Kubernetes baseurl = https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled = 1 pgcheck = 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 " > / etc / yum .repos.d / kubernetes.repo
kubernetesコンポーネントをインストールする
yum install -y parenting beadm kubectl --disableexcludes = kubernetes systemctl enable
###验证parenting状
systemctl status parenting
前のコマンドは、マスターと各ノードで別々に実行する必要があります。
Kubernetesマスターノードをインストールする
単一ノードのKubernetesの場合、次のように、マスターノードでポッドを分散できるように設定する必要があることに注意してください。
kubectl taint nodes --all node-role.kubernetes.io/master-
インストールする必要があるイメージのリストを作成します
kubeadm構成イメージリスト
プルツールをインストールする
curl -Lo / usr / local / bin / azk8spull https:// github.com/xuxinkun/littleTools/releases/download/v1.0.0/azk8spullchmod + x / usr / local / bin / azk8spull
使用方法:azk8spull k8s.gcr.io/pause:3.1
azk8spullツールを使用して、必要なイメージを順番にプルします
ネットワーク構成
エコー 1 > / proc / sys / net / bridge / bridge-nf-call-iptables エコー 1 > / proc / sys / net / ipv4 / ip_forward
マスターを初期化する
sudo kubeadm init --pod-network-cidr = 10.244。0.0 / 16
注:--pod-network-cidrを設定する必要があります。これもフランネルと同じであるため、IPアドレスは上記に記載するのが最適です。
インストールが成功すると、結合クラスターのステートメントとトークン値が次のように出力されます。
次に、rootとして次の コマンドを実行することにより、任意の数のワーカーノードに参加できます。kubeadm join 192.168。137.205:6443 --token 66ym67.0wdrafrclpzuwk74 --discovery-token-ca-cert-hash sha256:e7b32df67ec6d75bf79c94499a40450aa5e33f6b23365cd7f0f6eaeba4f15c70
ノードのインストール用に保存できます
インストールが失敗した場合は、リセットできます
kubeadmのリセット
承認情報を構成する
initが成功すると、マスターノードが正常に初期化され、成功後にいくつかの操作が要求されます。(失敗した場合は、問題に基づいて改善してください)。
クラスタの使用を開始するには、次のコマンドを実行する必要があります。
これは、主に関連する構成情報をユーザーディレクトリに保存するために承認情報を構成するため、関連する認証情報を毎回入力する必要はありません。
mkdir -p $ HOME / .be sudo cp -i /etc/kubernetes/admin.conf $ HOME / .be / config sudo chown $(id -u):$(id -g)$ HOME / .be / config
kubeletの構成を確認する
cat / var / lib / kubelet / kubeadm-flags。env
KUBELET_KUBEADM_ARGS =-cgroup-driver = cgroupfs --network-plugin = cni
フランネルをインストール
Flannelは、CoreOSチームがKubernetes向けに設計したオーバーレイネットワークツールです。その目的は、Kuberentesを使用するすべてのCoreOSホストが完全なサブネットを持つことを支援することです。
sysctl net.bridge.bridge-nf-call-iptables = kubectl apply -f https:// raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml systemctl restart docker kubectl get nodes
ノードをインストール
マスターのみをインストールする場合は、スキップできます
1.イメージをインストールします
2.ネットワーク構成
3. マスターに保存されたステートメントを使用して、ノードをクラスターに参加させます
kubeadm が 192.168に参加します。137.205:6443 --token 66ym67.0wdrafrclpzuwk74 --discovery-token-ca-cert-hash sha256:e7b32df67ec6d75bf79c94499a40450aa5e33f6b23365cd7f0f6eaeba4f15c70
忘れた場合は、次のステートメントを使用して取得できます。
kubeadm token create --print- join -command
ダッシュボードをインストール
ダッシュボードのyamlファイルを取得する
wget https:// raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
壁がある場合は、最初にファイルをダウンロードしてから、サーバーにコピーできます。
ダッシュボードをk8sにインストールする
kubectl apply -f kubernetes-dashboard.yaml
管理ユーザーを作成
kubectl create clusterrolebinding admin --clusterrole = cluster-admin --user = admin
管理者ユーザーをkubernetes-dashboardサービスにバインドする
####プロンプトがすでに存在する場合は、 clusterrolebinding kubectl create clusterrolebinding kubernetes -dashboard --clusterrole = cluster-admin --serviceaccount = kube-system:kubernetes-dashboardの後に名前を変更します
ポート転送
デフォルトでは、ダッシュボードはローカルホストでのみアクセスできるため、ポート転送が必要です
####这样使用https://ip:10443端口访问即可 nohup kubectl port-forward -n kubernetes-dashboard service/kubernetes-dashboard 10443:443 --address 0.0.0.0 &
经过一系列操作之后,可以通过https://ip:10443进行访问,但是此时是只能通过token访问的,token获取方式如下:
####执行如下命令,获取所有的secret,找到名字为dashboard-admin的kubectl get secrets NAME TYPE DATA
AGEdashboard-admin-sa-token-zhjng kubernetes.io/service-account-token 3 16h
default-token-vqjcd kubernetes.io/service-account-token 3 17h ####执行如下命令,获取Token kubectl describe secret dashboard-admin-sa-token-zhjng
复制输出的token到登录界面即可。
启用Basic Auth(用户名和密码)
默认是token方式,比较繁琐
编辑kubernetes-dashboard.yaml文件(默认在/etc/kubernetesdashboard下)
####找到kind为Deployment下的containers-->节点,加入如下配置,默认为token
- --authentication-mode=basic
保存退出,现在访问https://ip:10443会有一个用户名和密码的输入框,可以登录成功,但是看不到数据。
通过kubectl getpods -n kubernetes-dashboard 查看DashBoard的pods状态,如果状态不为 Running,则表明其实失败或启动中。可以通过 kubectl describe pods -n kubernetes-dashboard进行查看,确定是否存在异常,如果发现最后的状态是Pull Image,表明拉取镜像太慢,可以手动通过 azk8spull imagename或者是通过docker pull imagename手动拉取。
Tips:强制替换执行yaml文件
kubectl replace --force -f kubernetes-dashboard.yaml
解决访问安全问题
经过上边的操作,可以使用用户名和密码登录,但是看不到数据,继续折腾。创建包含用户名和密码的csv文件
####格式是 密码,用户名,uid echo "admin,admin,1" > /etc/kubernetes/config/basic_auth.csv
编辑kube-apiserver.yaml文件
vim /etc/kubernetes/mainfests/kube-apierver.yaml ####找到-kube-apiserver节点,加入如下配置,注意层级 - --basic-auth-file=/etc/kubernetes/config/k8sdashboardauth.csv - --authorization-mode=Node,RBAC ####由于使用了配置文件,则需要把宿主机器的config文件夹挂载到容器中 ####1.在配置文件中找到volumes节点,加入如下配置,注意层级 - hostPath: path: /etc/kubernetes/config type: DirectoryOrCreate name: k8s-auth-config ####2.在配置文件中找到volumeMounts节点,加入如下配置,注意层级 - mountPath: /etc/kubernetes/config name: k8s-auth-config readOnly: true ####退出编辑,保存文件
这个时候,退出登录DashBoard,重新登录,不出意外,可以看到所有的数据了,到此为止,DashBoard实现了使用用户名和密码登录。
注意:不管是启动的kubernest相关的组件,还是DashBoard,都是运行在docker中的容器,当出现问题的时候,可以使用docker logs 容器名称(容器id)查看日志,或者使用 kubectl pods -n namespace方式查看pod的信息,进行确定问题所在。
总结:
通过一步一步,我们终于把kubernetes给安装成功了,同时也安装了一个dashboard可以可视化操作,也开启了用户名和密码方式的登录。到这里,kubernetes的安装工作就完成了,相信你跟着上述的步骤,可以成功的安装成功。
参考文章
https://blog.csdn.net/jholy/article/details/84962357